おさかなさんの覚え書き
POST: 2020-02-13 / UPDATED: 2020-03-04

HTML特殊文字でHexoのコード表示の中身をエスケープする

HTML Hexo

Hexoで<>などのHTMLタグをエスケープする

scriptsフォルダをプロジェクトディレクトリ直下に作成

scriptsフォルダをすでに作成している方はスルーしてよい。
このフォルダはHexoの初期化時に読み込まれるので、HexoPluginのように動作してくれたり。

scriptsフォルダ直下にescape.jsを作成する

全変換でゴリ押し

Markdownは整うけれど他のHTMLタグにも影響がある

escape.js
hexo.extend.filter.register('before_post_render', function(data){
    if (data.layout=="article") {
        var content = data.content;
        data.content = content.replace(/</g,"<").replace(/>/g,">").replace(/ >/g,">")
        return data;
    }
});
hexo.extend.filter.register ('after_post_render', function(data) {
    var content = data.content;
    data.content = content.replace(//g,"").replace(/<pre><code.*>/g,"<pre>").replace(/<\/code><\/pre>/g,"</pre>")
    return data;
});

.replace(/ >/g,">")で引用に使う>の左に半角スペース一個が入っている場合markdownとして認識するようにしている。escapeHTML()を試したがうまくいかなかったので現状はこれで放置。

Markdown-itを導入済み

<pre></pre>内のエスケープを勝手にやってくれるのでafter_post_renderだけで事足りる。

escape.js
hexo.extend.filter.register ('after_post_render', function(data) {
    var content = data.content;
    data.content = content.replace(//g,"").replace(/<pre><code.*>/g,"<pre>").replace(/<\/code><\/pre>/g,"</pre>")
    return data;
});
TWEET