hexo编码问题
最近重拾起刷题,又需要重新推一下博客,遇到了之前遇到过但是没有解决的问题,今天重新花时间整理了一下,大致解决了问题
但是经过一次全部的重构之后
title处不能使用特殊字符
该问题可以通过html编码解决,将[]替换为html编码[
和]
即可,但是出现了一些衍生错误,标题中不能使用空格,否则标题可能会缺一部分,使用下划线替代空格之后显示的又是空格,暂时不清楚怎么回事
找到另一个替代方法,将title用单引号包裹起来即可,展示时不会出现单引号,较为方便,在标题不出现单引号的情况下用单引号包裹title可以保证其他特殊字符不出现解析错误
文章内不能出现{% %}或{{}}
如上两个标记会被hexo引擎解析错误,每次在写和ssti相关文章时必报该错,目前只有一个较为愚蠢的解决方案。使用对应的标记对{% raw %}{% endraw %}来包裹可能出问题的内容,但不能随意使用该对,hexo会将这两个标记中的所有字符均视为普通字符,包裹内容过大会导致文章代码高亮等语法无效
在代码段中使用反引号
之前遇到这个问题的时候都没有考虑,今天update一下,只要在外围的反引号数多于代码块中的反引号数量就可以了print `whoami`;
这一段实际上是``print `whoami`;``
如果需要用连着的两个反引号,就在外层是连着的三个反引号就行了
看的这个大哥的文章
在代码块中使用反引号(代码块开始标记)的方法
贴一个自己写的hexo头部自动格式化脚本
辣鸡脚本,勉强能用就行
import os
import re
import time
import numpy as np
from random import randrange
header = '''---
title: {0}
date: {1}
tags:
-
categories:
img: /img/{2}
---
'''
dir = "D:/blog/source/_posts/"
img_path = "D:/blog/themes/hexo-theme-matery/source/img/"
files = os.listdir(dir)
file_cnt = len(files)
modify_cnt = 0
if os.path.exists("log.npy"):
modified_files = np.load('log.npy')
else:
modified_files = np.array('example.md')
for file in files:
if file[-3:] == ".md":
if file not in modified_files:
print("[+]" + file)
file_path = dir + file
with open(file_path, 'r', encoding='UTF-8') as f:
line = f.readline()
f.seek(0)
result = ""
content = f.read() # 读取整个文件
if line != "---\n": # 未处理头部
title = re.sub("(# )|\n", "", ("'" + line + "'"))
ctime = os.path.getctime(file_path) # 创建时间
date = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(ctime))
img_list = os.listdir(img_path)
index = randrange(0, len(img_list))
img = img_list[index] # 随机一个封面图片
result = header.format(title, date, img)
# 编码可能出错的字符,重写整个文件
f.close()
with open(file_path, 'w', encoding="UTF-8") as f:
content = (result + content)
f.write(content)
f.close()
modify_cnt += 1
modified_files = np.append(modified_files, file)
np.save('log.npy', modified_files)
print(str(modify_cnt) + " file(s) modified, " + str(file_cnt) + " file(s) total.")