Closed real-jiakai closed 1 year ago
const contentHtml = unified()
.use(remarkParse)
.use(gfm)
.use(remark2rehype, { allowDangerousHtml: true })
.use(rehypeRaw)
.use(rehypeStringify)
.use(rehypePrism)
.use(rehypeSlug)
.use(rehypeAutolinkHeadings)
.process(matterResult.content)
.then((processedContent) => processedContent.toString())
关于这段处理函数的chatgpt4解释:
使用remark-prism来高亮代码块,效果不错。但是中间存在一些不优雅之处。
1、部分实现代码
b. 引入prism主题
2、弊端与问题
2.1、弊端
使用remark-html插件将markdown文件转换为html时,默认情况下会将一些特殊符号,转换为html实体(entity),如将
>
转换为>
,<
转换为<
。因此如果没有自定义的
retoreSpecialCharacters
处理函数,则在markdown转换为html后,原本包裹在markdown代码块语法(``)中的代码块中的特殊字符,如
>`标注符号会变为\>原本被纯文本代码块包裹的代码中出现特殊字符转为了html实体:
2.2、问题
remark-html插件中提供了一个选项
sanitize
,将其值设置为false时,危险的原始html代码不会被转换。但是我设置后,发现依然没解决此问题。与此同时,remark-html仓库中的一个issue—Sanitize example does not work as described #24引起了我的注意。仓库的维护者是这样回复的:
作者说,要想实现对于特殊字符转换的控制,最好采用retype库中的插件。作者的意思是要想更加精细地将markdown转为html,以避免特殊字符转换,最好使用retype库及其插件来处理,remark-html插件的细粒度不够。
3、补充
其余一些类似的issue:
stringify option to not convert < to < #187
Not escaping > in code block or span #955
4、参考资料
HTML Entities
Special Entities
remark
remark-html