SyntaxHighlighter Evolved 3.x のエスケープを解除する


Posted on Sun, Oct 2, 2016
Tags wordpress, syntaxhighlighter

問題

Wordpress でコードを表示するために、SyntaxHighlighter Evolved 3.2.1 を利用しているのですが、このプラグイン、デフォルトのままではコードの中に含まれる ` や < のような記号をhtml用の特殊文字に変換してしまいます。 HTML特殊文字とは?

そのため、プラグインのコードを少し編集して、この問題を直す必要があります。(別のプラグインを利用するのもありです → Crayon Syntax Highlighter追記:JP Markdown プラグインとの相性を確認してから Crayon の方に移行しました。こちらは、テーマの変更やフォントなどが変えられるためお勧めです

解決策

  1. wp-admin 画面でインストール済みプラグインの画面へ移動し、SyntaxHighlighter を 「編集」します。

  2. htmlspecialchars 関数が使われている箇所(コードでいうと1046行目あたりにあります。ブラウザの検索機能で htmlspecialchars を検索しましょう) をコメントアウトして、

$code = ( false === strpos( $code, '<' ) && false === strpos( $code, '>' ) && 2 == $this->get_code_format($post) ) ? strip_tags( $code ) : htmlspecialchars( $code );

以下のようにするだけで修正されます。

$code = ( false === strpos( $code, '<' ) && false === strpos( $code, '>' ) && 2 == $this->get_code_format($post) ) ? strip_tags( $code ) : $code; //htmlspecialchars( $code );

htmlspecialcharsは複数個出てきますが、 3.2.1 に関して言えば、1046行目のものだけをコメントアウトすれば良いみたいです。

補足

この htmlspecialchars は php の標準で組み込まれている関数 で、HTMLのタグなどと競合しないようにするために使われます。 変換された文字はこのサイト の通りですが、ブラウザで表示される際に元に戻す必要があります。 その関数が htmlspecialchars_decode でこのプラグインの中にも登場していると思います。