何が起こっているのか
Crayon Syntax Highlighter の タグエディタから入力した場合は、ダブルクォートを入力しても " にエンコードされずに、そのまま " として入力されます。 しかし、HTML コード中にダブルクォートやシングルクォートを書くのが何となく違和感があるので、" と書きたいのです。MarsEdit でいつものように " と書いても展開されないのは、個人的にはちょっと困った仕様です
サポートでも同じような質問をされていますがクローズされていません
私と同じように " と書いてもダブルクォートにデコードされていません。
ソースを追いかけてみる
サポートに質問している彼も Quick Hack をしているので、私も Plugin のソースをトレースしてみました
174 175 176 177 |
// Decode html entities (e.g. if using visual editor or manually encoding) if ($this->setting_val(CrayonSettings::DECODE)) { $code = CrayonUtil::html_entity_decode($code); } |
DECODE を true に指定していると CrayonUtil::html_entity_decode を呼んでいるようです。CrayonUtil::html_entity_decode は PHP の標準関数である html_entity_decode を ENT_NOQUOTES というフラグで呼んでいるのでダブルクォートもシングルクォートも変換されないんですね。
155 156 157 |
public static function html_entity_decode($str) { return html_entity_decode($str, ENT_NOQUOTES, 'UTF-8'); } |
意図的にこのような仕様にしている気もするのですが、HTML 中にダブルクォートやシングルクォートを直接書くことはないはずなので、思い切って書き換えてしまいました。
155 156 157 158 159 160 161 162 163 |
public static function html_entity_decode($str) { // return html_entity_decode($str, ENT_NOQUOTES, 'UTF-8'); return html_entity_decode($str, ENT_QUOTES, 'UTF-8'); } public static function htmlspecialchars($str) { // return htmlspecialchars($str, ENT_NOQUOTES, 'UTF-8'); return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); } |
これで何とか思い通りの動きをしてくれるようになりました。
ただ、ソースを全て見きっている訳ではないので、同じ修正をする場合は、自己責任でお願いします。
WordPress 関連のエントリ
インストールや設定変更とデータ移行
プラグイン
バージョンアップ
カスタマイズ
Stinger 3関連
チューニング
MAMPを使ったバックアップサイトの構築
開発関連
最後まで読んでいただきありがとうございます。
左のアイコンをクリックして、このブログを Feedly に登録していただけると嬉しいです
Facebook ページでも情報を発信していますのでよろしかったら「いいね!」をお願いします
RSSリーダへの登録は こちら からどうぞ。
コメントを残す