文字列内のクォートのエスケープ
文字列リテラル内に引用符を含めるテクニックをマスターしましょう。バックスラッシュによるシングルクォートとダブルクォートのエスケープ、デリミタの交替、言語固有のクォーティングルールを解説します。
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脆弱性の主要な原因でもあります。