PHPエスケープ文字の問題

WBOY
WBOYオリジナル
2016-06-23 14:39:461154ブラウズ

インターネットでたくさんの記事を見つけましたが、そのどれもが次のように述べています:
一重引用符を区切り文字として含む 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 = ""二重引用符" 内の"一重引用符" テスト:
元の出力文字列 = "一重引用符" 内の "二重引用符" テスト。
エスケープ単語文字列 = '一重引用符' 内の "二重引用符"テスト。
文字列 = '一重引用符' 内の二重引用符を復元します。
二重引用符のテスト:
元の出力文字列 = 二重引用符内の '一重引用符' をテストします。
エスケープされた文字列内の '一重引用符' をテストします。 ="二重引用符"。
復元された文字列 "二重引用符" 内の '一重引用符' をテストします。


ディスカッションへの返信 (解決策)

一重引用符内の場合: と \ も同じに変換されます。 addslashes() の後の 2 つのバックスラッシュ: \。
addslashes はエスケープを強制されます。

addslashes は特定のエスケープ文字をエスケープします。

単一引用符内でサポートされる文字は 2 つだけです。 、「

しかし、実際には 」もサポートしています、私のテスト結果をよく見てください。

まずエスケープが行われる理由を理解する必要があります

'ab'c' など、一重引用符で囲まれた文字列の中に一重引用符がある場合

"ab" など、二重引用符で囲まれた文字列の中に二重引用符がある場合c"
この文字列は b で終わると思いますか、それとも c で終わると思いますか?
混乱していますか? これは '(") の曖昧さによって引き起こされる曖昧さのためです
そこで、この曖昧さを解決するために、エスケープの概念が導入されます。これらの文字は一般にテキストに出現しないため、エスケープ文字として使用されます

', " の 'ab'c'、"ab"c" により、引用符は意味を失い、通常の文字としてのみ扱われます

r , n, t は、r、n、t の文字の意味を失い、ASCII コードのキャリッジリターン、ラインフィード、タブ文字として扱われます

本文中に出現することはほとんどありませんが、出現する可能性はあります。 \ を使用すると、エスケープの効果が \ から失われます



string addslashes ( string str )


データベース クエリ ステートメントなどの特定の文字の前にバックスラッシュが追加された文字列を返します。これらの文字は、一重引用符 (')、二重引用符 (")、バックスラッシュ ()、および NUL (NULL 文字) です。

エスケープされた文字列では、addslashes() を使用します。これにより、二重エスケープが発生するため、

この状況が発生した場合は、次のことができます。それを検出するには get_magic_quotes_gpc() 関数を使用してください

ははは、addslashes() の後に 2 つの \ があります。これがバグかどうかはわかりません。 1 つのバックスラッシュ:; 2 つのバックスラッシュ: \';
表示文字列 = 1 つのバックスラッシュ:\; 2 つのバックスラッシュ:\
2 つのバックスラッシュ:

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。