エンコード
JavaScript エスケープ
JavaScript の文字列リテラルに動的な文字列を埋め込む際のエスケープを行います。バックスラッシュ / クォートに加え、< > & も Unicode エスケープに変換し、`</script>` 注入攻撃を防ぎます。
サンプル
直近の入力
全履歴 ·
履歴はあなたのブラウザにのみ保存されます。サーバーに送信されません。 設定
こんなときに使う
サーバーで動的に JS を生成する
PHP / Ruby / Python から `<script>var x = "...";</script>` を出力するとき、ユーザー由来の値をエスケープして埋めます。
JSON.stringify で対応しきれない場合
JSON.stringify は基本のエスケープしか行わず、HTML コンテキストでの安全性は保証されません。本ツールは < > & も Unicode 形式に。
ログメッセージを安全に出す
console.log に動的文字列を渡す前にエスケープして、改行や制御文字でログが乱れないようにします。
テストフィクスチャの文字列リテラル化
DB から取得した値を JS のソースコードに埋め込んでテストデータにするとき、エスケープしたまま貼り付けます。
正規表現リテラルに動的文字列を埋め込む前段
new RegExp() より単純な /.../ リテラルに埋め込みたい場合、JS エスケープ → 正規表現エスケープの順で適用します。
テンプレートリテラル内のバッククォートをエスケープ
`...` 内で ` を使いたい場合は \` にエスケープ。本ツールはバッククォートも対象。
よくあるエラーと対処
ERR
エスケープしても <script> 注入が成立 - 原因
- HTML の <script> タグ内に動的 JS 文字列を埋めるとき、`</script>` の文字列が中に含まれると HTML パーサがタグを閉じてしまいます。
- 対処
- < > & を Unicode (\u003c など) にエスケープしてください。本ツールはこれを自動で行います。
ERR
アンエスケープが想定通り動かない - 原因
- テンプレートリテラル内の特殊な記法(${...})はエスケープ対象外なので、入力に含まれていてもそのまま通ります。
- 対処
- 本ツールは ECMAScript の文字列リテラル仕様に準拠します。テンプレートリテラルを安全にしたい場合は別途処理が必要です。
ERR
改行を含む文字列が壊れる - 原因
- 改行(U+000A / U+000D)は文字列リテラル内では \n または \r にエスケープしないと構文エラーになります。
- 対処
- 本ツールは \n / \r に変換します。テンプレートリテラル(バッククォート)なら改行もそのまま許容されます。
ERR
ASCII 制御文字(\0 〜 \x1f)でログが乱れる - 原因
- NULL バイトやベル文字などの制御文字は端末で挙動を変えます。
- 対処
- 本ツールは制御文字を \uNNNN にエスケープします。
CLI / 他言語でやる方法
Node.js JSON.stringify
node -e "console.log(JSON.stringify('<test>'))" JSON 仕様の範囲ではエスケープ可能。HTML 安全性は別途。
Python
python -c "import json; print(json.dumps('<test>'))" ensure_ascii=True で全非 ASCII を \u エスケープ。
よくある質問
▶ JSON.stringify で十分ではないですか?
JSON 仕様では < > & は素のまま出ます。HTML の <script> タグ内に埋める場合、`</script>` でタグが閉じる事故が起きます。本ツールは < > & を Unicode 形式にして安全に。
▶ テンプレートリテラル(バッククォート)でも使える?
本ツールはバッククォートを `\\\``(バックスラッシュ + バッククォート)にエスケープします。テンプレート内で安全に使えます。
▶ ECMAScript 仕様の StringLiteral と JSON 文字列の違いは?
JS 文字列はシングル / ダブル / バックの 3 種、JSON はダブルのみ。JS は \v など追加のエスケープがあります。本ツールは JS 用に幅広く対応。
▶ Unicode エスケープ \uXXXX と \u{XXXXXX} の違い
前者は BMP のコードポイント(U+0000-FFFF)まで。後者(u フラグ正規表現や ES2015+)はサロゲート不要で大きなコードポイントも扱えます。
▶ サロゲートペアの絵文字は?
本ツールはサロゲートペアをそのまま保持します(壊さない)。手動で \u{...} 形式にしたい場合は別途処理が必要です。
▶ エスケープした文字列を eval() に渡すのは安全?
eval() はそもそも避けてください。Function コンストラクタも同様。安全性が要求される場面では JSON.parse / 専用パーサを使ってください。
▶ PHP の json_encode とは違う?
json_encode はデフォルトで / を \/ にエスケープしません(オプション JSON_HEX_TAG / JSON_HEX_APOS / JSON_HEX_QUOT で追加可能)。本ツールは / もエスケープして HTML 内 </script> 対策。
▶ 既にエスケープされた文字列を再エスケープしたら?
二重エスケープになります(\n が \\n に)。アンエスケープ→再エスケープでない限り、繰り返し適用しないでください。