文字列のエスケープとアンエスケープ
JSON・JavaScript 文字列、SQL 文字列、CSV フィールド、正規表現、シェルの語向けにテキストをエスケープしたり、エスケープを元に戻したりします。
コード例
自分のプロジェクトにコピーして使えます。どの例も言語の標準ライブラリだけを使うので、インストールするものはありません。
const text = 'He said "hi"'
console.log(JSON.stringify(text).slice(1, -1))できること
テキストを JSON・JavaScript 文字列、SQL 文字列、CSV フィールド、正規表現、シェルの語の中に置けるようエスケープし、エスケープを元に戻します。各形式は必要な文字だけを正確にエスケープします。
使い方
- テキストを入力または貼り付けるか、テキストファイルをドロップします。
- テキストの行き先(JSON 文字列、JavaScript 文字列、SQL 文字列、CSV フィールド、正規表現、シェルの語)と、エスケープかアンエスケープかを選びます。
- 結果をコピーまたはダウンロードするか、出力を入力として使うで次の入力にします。
例
He said "it's fine" と改行のエスケープ:
JSON は He said \"it's fine\"\n、SQL は He said "it''s fine"、シェルは 'He said "it'\''s fine"' になります。
知っておくと便利なこと
- JSON と JavaScript は、バックスラッシュ、文字列を囲む引用符、改行、制御文字をエスケープします。アンエスケープは
\n、\t、\uXXXXなどを読み、JavaScript は\xHHと\u{…}も読みます。 - SQL は単一引用符を2つ重ねます。手書きのリテラルには正しい方法ですが、コードではバインドパラメータを使ってください。
- CSV フィールドは、カンマ・引用符・改行を含むときだけ引用符で囲み、中の引用符は2つ重ねます。
- シェルの語は単一引用符で囲み、中の単一引用符は
'\''と書くので、何も展開されません。
形式ごとにエスケープが違うのはなぜですか?
構文ごとに特殊文字が違います。JSON 文字列では引用符、バックスラッシュ、制御文字をエスケープします。SQL 文字列では単一引用符を2つ重ねるだけです。CSV フィールドはカンマ・引用符・改行を含むと引用符で囲みます。正規表現は演算子をエスケープし、シェルの語は何も展開されないよう単一引用符で囲みます。
よくある質問
エスケープだけで SQL インジェクションを防げますか?
いいえ。引用符を重ねるのはこのツールが示す方法で、手書きのクエリのリテラルには正しいですが、コードの防御ではありません。値はバインドパラメータとして渡し、SQL 文の一部にならないようにしてください。
JSON 文字列と JavaScript 文字列の違いは?
JSON は少数のエスケープしか許さず、常に二重引用符を使います。JavaScript は単一引用符、\x41や、どちらの引用符でもエスケープを許します。そのため JSON としてアンエスケープすると、JavaScript なら受け入れる並びは拒否されます。
このツールはテキストをどこかに送信しますか?
いいえ。すべてブラウザ内で行われます。入力した内容が当社のサーバーに送信されることはありません。