- ベストアンサー
エスケープについて
あるアプリケーションに値を渡すために、「"」を「\"」としてエスケープを行って値を渡しております。 尚、「\」は「\」単独で渡す事ができます。 ここからが質問になります。 「"\」という文字を渡す場合には「\"\」となりますが、「\"」という文字を渡す場合には「\\\"」としなければ正しく値が渡りません。 個人的な考えとして「\"」という文字を渡す場合には「\\"」という文字列になる気がするのですが、このエスケープの方法は一般的なものなのでしょうか? 実装などによって異なるのはわかりますので、一般論としてお答えいただけると幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
「一般的」という観点からだと, 「"」を「\"」とエスケープするなら「\」自身もエスケープして「\\」で渡すのが一般的だと思います. 渡し方について, 文書できちんと確認してみてください. 「"」をエスケープするということから値の渡し方について「" で囲まれた部分を渡す」という仕様であると考えられます. しかも, 「開く " に対応する最初の " までが渡す値である」とも想像できます (そうでなければ「"」をエスケープする必要がないことに注意). このような仕様の場合, 普通は「\」にもエスケープが必要であるとします. なぜなら「\"」という文字列があった場合「" をエスケープしたもの (その後にも渡すべき値が続く)」という解釈と「最後が \ であるような文字列 (だからそこで渡す値は終わる)」の 2つの解釈が可能だからです. もちろん仕様として「エスケープが不要な文字の前に \ がある場合, その \ はエスケープ文字ではなく \ 自身を表す」となっている可能性はありますが, この仕様は (少なくとも) 積極的に使うべきものではないと思います.
その他の回答 (2)
- Lchan0211
- ベストアンサー率64% (239/371)
一般論を言います。 CでもJavaでもPHPでも、文字列を表現する際、 「"」は「\"」と記述し、 「\」は「\\」と記述します。 (参考) http://www.cppdrive.jp/cstart/num/index5.html 一般的には、このエスケープ仕様をもとに、 「"\」は「\"\\」と記述し、 「\"」は「\\\"」と記述するのが よく見られるケースだと思います。 「\」は「\」単独で渡すという仕様は あまり見た事ありません。
- phoenix343
- ベストアンサー率15% (296/1946)
個人的には 「\\\"」が正しい気がしますね。 文字列の定義が "で囲まれることを前提とする場合ですけどね。 ("\\""だと最後の"がどんな処理されるか、、) "\\\""