機能
文字列エスケープツールは、テキストを文字列リテラルの中に入れられる形に変換し、エスケープされた文字列を元のテキストに戻します。対応するのは JSON、JavaScript、Java と C#、Python、SQL の文字列リテラル、CSV のフィールド、XML のテキストと属性、正規表現、POSIX シェルコマンドの 9 種類です。それぞれの言語の規則に従うので、結果をそのままコードに貼り付けても構文エラーになりません。
よくある使い道は、複数行のメッセージや Windows のパスを JSON の設定ファイルに書く、HTML の断片を JavaScript の文字列に埋め込む、空白を含むファイル名をシェルスクリプト用に引用符で囲む、price (USD) のような検索語をそのまま一致する正規表現にする、などです。
使い方
- 「エスケープ」か「アンエスケープ」を選びます。
- 言語または形式を選びます。
- 入力欄にテキストを貼り付けるか「サンプル」をクリックします。結果は入力に合わせて更新されます。
- 出力をコピーするか、「入力として使う」で逆変換して元に戻るか確認します。
JSON、JavaScript、Java/C#、Python では非 ASCII 文字もすべてエスケープでき、どんなファイルエンコーディングでも崩れない純粋な ASCII 文字列が得られます。
例
同じ行をそれぞれの形式でエスケープした結果です。
Input: He said "hi" in C:\Temp
JSON: He said \"hi\" in C:\\Temp
SQL: He said "hi" in C:\Temp (only ' is doubled)
Regex: He said "hi" in C:\\Temp
Shell: 'He said "hi" in C:\Temp'
形式ごとの規則
- JSON:引用符、バックスラッシュ、制御文字をエスケープします。
JSON.stringifyと同じ結果です。 - JavaScript:さらにシングルクォート、バッククォート、垂直タブ、行区切り文字 U+2028・U+2029 もエスケープします。
- Java / C#:バックスラッシュエスケープと
\uXXXX。アンエスケープでは Java の 8 進エスケープと C# の\x・\Uも受け付けます。 - Python:バックスラッシュエスケープと
\x・\u・\U。不明なエスケープは書かれたまま残します。 - SQL:標準 SQL の文字列リテラルに合わせてシングルクォートを重ねます。
- CSV:カンマ、引用符、改行、前後の空白を含む値をダブルクォートで囲み、中の引用符を重ねます。
- XML:定義済みの 5 つの実体に置き換えます。アンエスケープでは数値文字参照もデコードします。
- 正規表現:特別な意味を持つすべての文字の前にバックスラッシュを付け、テキストに文字どおり一致させます。
- シェル:値をシングルクォートで囲みます(POSIX シェルではシングルクォート内で展開が一切起きません)。中の引用符は
'\''と書きます。
よくある質問
› 文字列のエスケープとは何ですか?
文字列リテラルの中では、文字列を終わらせる引用符や改行など特別な意味を持つ文字があります。エスケープはそれらを安全な表記(多くはバックスラッシュと 1 文字)に置き換え、ソースコードやクエリ、ファイルに貼り付けても壊れないようにすることです。
› 文字列を囲む引用符も貼り付けますか?
いいえ。中身だけを貼り付けてください。エスケープ結果がコード内の引用符の間に入る部分です。値全体を引用符で囲む CSV とシェルでは、必要に応じてツールが外側の引用符を付けます。
› SQL のエスケープで SQL インジェクションを防げますか?
シングルクォートを重ねると正しい文字列リテラルになるので、手書きのクエリやマイグレーションスクリプトでは役立ちます。ただしアプリケーションのコードでは、文字列を連結して SQL を組み立てず、必ずパラメーター化クエリやプリペアドステートメントを使ってください。
› アンエスケープで「不明なエスケープシーケンス」と表示されるのはなぜですか?
言語ごとに使えるエスケープが異なるためです。たとえば JSON には \x や \0 がないので、選んだ言語が受け付けない最初のシーケンスの位置を表示します。Python は本物のインタープリターと同じく、\d のような不明なエスケープをそのまま残します。
› テキストはアップロードされますか?
いいえ。エスケープもアンエスケープもブラウザー内で行われ、サーバーには何も送信されません。