文字列内のクォートのエスケープ

文字列リテラル内に引用符を含めるテクニックをマスターしましょう。バックスラッシュによるシングルクォートとダブルクォートのエスケープ、デリミタの交替、言語固有のクォーティングルールを解説します。

Basic Escaping

詳細な説明

文字列内のクォートエスケープ

文字列が特定のクォート文字で区切られている場合、その同じ文字を文字列内に含めるには特別な処理が必要です。エスケープしなければ、パーサーは内側のクォートを文字列の終端と解釈し、構文エラーが発生します。

バックスラッシュエスケープ

最も一般的なアプローチは、クォートの前にバックスラッシュを付けることです:

const single = 'It\'s a test';
const double = "She said \"hello\"";

バックスラッシュにより、パーサーは後続のクォートを文字列終端ではなくリテラル文字として扱います。

デリミタの交替

多くの言語ではシングルクォートとダブルクォートの両方が使用できます。コンテンツに含まれないデリミタを選択することでエスケープを避けられます:

message = "It's a test"        # エスケープ不要
message = 'She said "hello"'   # エスケープ不要

言語固有のアプローチ

  • Python: トリプルクォート文字列("""...""" または '''...''')では、エスケープなしでシングルまたはダブルクォートを含められます。
  • JavaScript / TypeScript: テンプレートリテラル(\...`)ではシングルやダブルクォートのエスケープが完全に不要です。内部ではバッククォートと ${` のみエスケープが必要です。
  • SQL: 標準SQLではシングルクォートを二重にしてエスケープします:'O''Brien'。一部のデータベースはバックスラッシュエスケープも受け入れます。
  • C# / Java: String 型にはダブルクォート文字列のみ使用可能なため、ダブルクォートは常にバックスラッシュエスケープが必要です。

ネストされたクォーティングの課題

文字列を含むコードを生成する場合、クォートエスケープが積み重なることがあります。各ネストレベルでエスケープが乗算されます。テンプレートリテラルやraw文字列はこの複雑さを大幅に軽減します。

HTML属性のクォーティング

HTMLでは、属性値にシングルクォートまたはダブルクォートのいずれかを使用できます。値に一方の型が含まれる場合、もう一方で囲みます。または、HTMLエンティティを使用します:"(ダブルクォート)、'(シングルクォート)。

ユースケース

クォートエスケープは、HTML属性への文字列の埋め込み、SQLクエリの構築、JSONデータの生成、クォート付き引数のシェルスクリプト作成、コードジェネレータやテンプレートシステムの構築で日常的に遭遇します。不正なエスケープはSQLインジェクションやXSS脆弱性の主要な原因でもあります。

試してみる — String Escape/Unescape

フルツールを開く