ブログにHTMLコードを貼り付けるときpreタグでもエスケープしないとうまく表示されない。
JavaScriptでエスケープする方法を調べてみたら、手動で置換してたり一行にしか対応してなかったり、空白が全部 になったり、あまり思ったような物がなかった。
WordPressではビジュアルモードにコードを貼り付けた後、HTMLモードにすればエスケープしてくれるんだけど、jQueryでもHTMLをエスケープできるといいなと思い、ツールを作ってみた。
<script type="text/javascript">
function escapeTextArea(){
var pre = $('<pre/>').text($('#rawText').val());
$('#escapedText').val(pre.html()); // textareaに表示
$('#escapedText').after(pre.text(pre.html())); // preタグを追加して表示
}
</script>
<textarea id="rawText" cols="60" rows="10"></textarea><br>
<button onclick="escapeTextArea();">エスケープ</button><br>
<textarea id="escapedText" onclick="this.select();" cols="60" rows="10"></textarea>
textarea#rawTextに入力された生のHTMLを生成したjQueryオブジェクト(ここではpre要素)にtextメソッドで入力する。
textメソッドではHTMLとして解釈せずテキストとして表示されるように自動的にエスケープしてくれる。
textarea#escapedTextにエスケープされた内容をhtmlメソッドで取り出し入力する。
textareaではなくpreで表示したい場合は、ブラウザに解釈されてしまうので、そのままではダメで、さらにtextメソッドを通してエスケープされてから表示するようにする必要がある。
参考記事: jQuery を使ってHTMLタグをエスケープする – hiromitz @ blog for designing and development
以下はデモ。
上のテキストエリアにコードを入力して「エスケープ」ボタンをクリックする。

