ホームページ >バックエンド開発 >PHPチュートリアル >PHPエスケープ文字の問題
インターネットでたくさんの記事を見つけましたが、そのどれもが次のように述べています:
一重引用符を区切り文字として含む PHP 文字列は 2 つのエスケープをサポートします: \, '
二重引用符を区切り文字として含む PHP 文字列は 8 つのエスケープをサポートします: \, ", r , n, t, $, [0-7]{1,3}, x[0-9A-Fa-f]{1,2}
しかし、実際の動作ではそうではありません このように、addshlashes() は一重引用符と二重引用符の両方をエスケープします。次の例は、異論がある人はいますか?
$single_quote_str = "一重引用符" 内にある
$double_quote_str = ""二重引用符" 内の"一重引用符" テスト:
元の出力文字列 = "一重引用符" 内の "二重引用符" テスト。
エスケープ単語文字列 = '一重引用符' 内の "二重引用符"テスト。
文字列 = '一重引用符' 内の二重引用符を復元します。
二重引用符のテスト:
元の出力文字列 = 二重引用符内の '一重引用符' をテストします。
エスケープされた文字列内の '一重引用符' をテストします。 ="二重引用符"。
復元された文字列 "二重引用符" 内の '一重引用符' をテストします。
ディスカッションへの返信 (解決策)
しかし、実際には 」もサポートしています、私のテスト結果をよく見てください。
まずエスケープが行われる理由を理解する必要があります
'ab'c' など、一重引用符で囲まれた文字列の中に一重引用符がある場合 "ab" など、二重引用符で囲まれた文字列の中に二重引用符がある場合c"
この文字列は b で終わると思いますか、それとも c で終わると思いますか?
混乱していますか? これは '(") の曖昧さによって引き起こされる曖昧さのためです
そこで、この曖昧さを解決するために、エスケープの概念が導入されます。これらの文字は一般にテキストに出現しないため、エスケープ文字として使用されます
r , n, t は、r、n、t の文字の意味を失い、ASCII コードのキャリッジリターン、ラインフィード、タブ文字として扱われます
本文中に出現することはほとんどありませんが、出現する可能性はあります。 \ を使用すると、エスケープの効果が \ から失われます
string addslashes ( string str )
データベース クエリ ステートメントなどの特定の文字の前にバックスラッシュが追加された文字列を返します。これらの文字は、一重引用符 (')、二重引用符 (")、バックスラッシュ ()、および NUL (NULL 文字) です。
この状況が発生した場合は、次のことができます。それを検出するには get_magic_quotes_gpc() 関数を使用してください
ははは、addslashes() の後に 2 つの \ があります。これがバグかどうかはわかりません。 1 つのバックスラッシュ:; 2 つのバックスラッシュ: \';
表示文字列 = 1 つのバックスラッシュ:\; 2 つのバックスラッシュ:\
2 つのバックスラッシュ: