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