0%

hexo编码问题

hexo编码问题

最近重拾起刷题,又需要重新推一下博客,遇到了之前遇到过但是没有解决的问题,今天重新花时间整理了一下,大致解决了问题
但是经过一次全部的重构之后

title处不能使用特殊字符

该问题可以通过html编码解决,将[]替换为html编码&#91&#93即可,但是出现了一些衍生错误,标题中不能使用空格,否则标题可能会缺一部分,使用下划线替代空格之后显示的又是空格,暂时不清楚怎么回事

找到另一个替代方法,将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.")