Movable Typeでダブルクォーテーションをエスケープしたいということがあったので、エスケープの方法についていくつか見てみます。
サンプルコード
まずはMovable Typeで用意されているエスケープについてみてみます。
まずはjsonで使用できる値にエスケープ処理するencode_json=”1″です。
<mt:EntryTitle encode_json="1">
エスケープ結果は以下のようになります。
ダブルクォーテーション"バックスラッシュ\タブ ↓ ダブルクォーテーション\"バックスラッシュ\\タブ\t
次にURLのフォーマットに合わせてエンコードするencode_url=”1″です。
<mt:EntryTitle encode_url="1">
エスケープ結果は以下のようになります。
https://example.com/sample/ ↓ https%3A%2F%2Fexample.com%2Fsample%2F
次にHTMLをエスケープするencode_html=”1″です。
<mt:EntryTitle encode_html="1">
エスケープ結果は以下のようになります。
<span class="em">テスト"A"</span> ↓ <span class="em">テスト"A"</span>
今回やりたかったことは、HTMLの属性値として使用する文字列からダブルクォーテーションをエスケープして、さらにHTMLタグが含まれる場合は除去したいという内容でした。
試した結果、remove_html=”1″の後にencode_html=”1″を指定すると、意図した処理になりました。
<mt:EntryTitle remove_html="1" encode_html="1">
<span class="em">テスト"A"</span> ↓ テスト"A"
属性の指定した順番に処理を行うようで、remove_html=”1″とencode_html=”1″を逆にすると、先にエスケープ処理が行われるため、HTMLタグの削除が行われないようでした。
<mt:EntryTitle encode_html="1" remove_html="1">
<span class="em">テスト"A"</span> ↓ <span class="em">テスト"A"</span>
HTMLではなくダブルクォーテーションのみエスケープしたい場合、encode_htmlの代わりにregex_replaceを使うこともできます。
<mt:EntryTitle remove_html="1" regex_replace='/"/g',""">
コメントが承認されるまで時間がかかります。