BOX@Eelこの広告は、90日以上更新していないブログに表示しています。シェルスクリプト「JavaScript文字列リテラル用のエスケープ」という表現は微妙だけど、要はサーバサイドでJavaScriptを動的生成する時に、文字列リテラルとして任意のパラメータを出力したい場合のエスケープ処理。先日(というか先月)書いたHTMLエスケープ用のシェルスクリプトは、通常のHTMLエスケープ用だ。HTMLの文法にて特別扱いされる最小限の文字をエスケープするので、HTML要素の内容(Content)ないし属性値として使用する文字列に対して適用するのが正しい。eel3.hatenablog.comサーバサイドではJavaScriptを動的生成することも時々ある。JavaScriptの文字列リテラルとして任意のパラメータを出力するスタイルだ。このケースでのエスケープは一般的なHTMLエスケープとは異なる。出力したJavaScriptの文字列リテラルをJavaScriptコード中で以下のプロパティ/メソッドに適用していて、かつHTML要素として解釈されたくない場合は、HTMLエスケープする。HTMLDocument.write()HTMLDocument.writeln()HTMLElement.innerHTMLJavaScriptの文字列リテラルとして許容される内容にエスケープする。「\」を「\\」に置換する。「'」を「\'」に置換する。「"」を「\"」に置換する。制御文字をエスケープシーケンスに置換する(例えば改行を「\n」に置換する等)追加の処理。JavaScriptのコードの出力先が何らかのタグの属性値の部分であるなら、属性値全体をHTMLエスケープする。JavaScriptのコードの出力先がscriptタグの中であるなら、「</script>」を含まないようにする。JavaScriptのコードの出力先がCDATAの中であるなら、「]]>」を含まないようにする。JavaScriptの文字列リテラルの範囲内で「</script>」や「]]>」と等価な別の表現にすればよい。Unicodeエスケープシーケンスに置き換えるのだ。変換元テキストがUTF-8であるという前提で、試しにシェルスクリプトでエスケープ処理を実装してみた。escape-jsstrという名前だ。'\n'面倒なので全てUnicodeエスケープシーケンスに変換している。hexdump(1)を使用できる環境なら、もう少し簡単に実現できる。"%02X"'とはいえ、いつもhexdump(1)を使えるとは限らない。LinuxやmacOS、FreeBSDなどを使う分には困らないが、Cygwinでは標準では含まれない(別途util-linuxを入れる必要がある)。商用UNIXは触ったことがないが、やはり怪しいようだ。echo(1)ライクに引数の文字列をエスケープするシェルスクリプトはこんな感じ。escape-jsstrHTMLエスケープネタと同様にとりあえず作ってみたけど、需要あるのかなあ?終わりに最終的には、こんな感じになった。時代遅れひとりFizzBuzz祭り、今回はCoffeeScriptだ。月別アーカイブはてなブログをはじめよう!eel3さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。