問題
Wordpress でコードを表示するために、SyntaxHighlighter Evolved 3.2.1 を利用しているのですが、このプラグイン、デフォルトのままではコードの中に含まれる ` や < のような記号をhtml用の特殊文字に変換してしまいます。 HTML特殊文字とは?
そのため、プラグインのコードを少し編集して、この問題を直す必要があります。
(あるいは、別のプラグインを利用するのもありです → Crayon Syntax Highlighter)
追記:JP Markdown プラグインとの相性を確認してから Crayon の方に移行しました。こちらは、テーマの変更やフォントなどが変えられるためお勧めです
解決策
- wp-admin 画面でインストール済みプラグインの画面へ移動し、SyntaxHighlighter を 「編集」する
- 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 でこのプラグインの中にも登場していると思います。