WordPress における実体参照
先日 WordPress のリッチテキストエディタ TinyMCE を最新バージョンにしましたが、個人的に大きな不満点であった、実体参照の扱いが挙動不審なのは解決しませんでした。< や > などがいつの間にか < や > に置き換わってしまったりするのです。
TinyMCE のプラグインに問題があるのかと色々いじってみたものの、ここの振る舞いを直せばあっちがおかしくなるといった感じでどうしても解決しませんでした。そこでふと WordPress 側の処理を確認してみたところ、MySQL からデータを読み込んでリッチテキストエディタに渡す前に (wp_richedit_pre() 関数で)次のような処理をしているのを発見しました:
// These must be double-escaped or planets will collide.
$output = str_replace('<', '&lt;', $output);
$output = str_replace('>', '&gt;', $output);
はぁ?何故 < と > だけ置き換えるんですか?そんなことしたら < と &lt; (エディタや表示出力では < と < に相当)の区別が付かないじゃないですか。不可逆変換しないでください。(T_T)
ってことで、諸悪の根源であったこの二行を削除し、TinyMCE の WordPress プラグイン側での無駄な努力も撤去したら問題解決しました。;-)
公開している TinyMCE 2.0.6.1 for WordPress 2.0.x についても、この二行をコメントアウトするパッチ(とコメントアウト済みファイルも)を同梱し、日本語リソースの追加や設定変更などをしたバージョンで置き換えました。
同梱パッチを適用するか(現在ご利用のものが WordPress オリジナルのものと変更がなければ)単に functions-formatting.php を同梱のもので置き換え、tinymce ディレクトリも同梱のもので置き換えれば動くはずです。