まず、PHP 組み込み関数 get_magic_quotes_gpc() について説明します
この関数の目的は、php.ini 設定の magic_quotes_gpc オプションの値を取得することです。
magic_quotes_gpc オプションの値が On の場合、PHP パーサーは、post、get、および cookie からのデータにエスケープ文字 "" を自動的に追加し、これらのデータがプログラム内の特殊文字によって引き起こされる致命的なエラーを引き起こさないようにします。データベースステートメントの間違い。
オンにすると、一重引用符 (')、二重引用符 (")、バックスラッシュ ()、NUL (NULL 文字) などの文字はバックスラッシュで囲まれます。それ以外の場合は、addslashes() を使用して手動で処理する必要があります
magic_quotes_gpc 値が On の場合は 1 を返し、それ以外の場合は 0 を返します
addslashes() 関数は、指定された定義済み文字の前にバックスラッシュを追加します。それが上記のキャラクターです
ただし、get_magic_quotes_gpc() 組み込み関数は PHP5.4 以降ではキャンセルされ、将来のエラーを回避するために、すべての入力は次のようにフィルターされます。 リーリー
mysql および GET および POST データを処理する場合、多くの場合、データの引用符をエスケープする必要があります。
PHP には、' (一重引用符)、" (二重引用符)、(バックスラッシュ)、および NULL 文字を自動的に変換できる 3 つの設定があります。
PHP ではこれをマジック クオートと呼び、これら 3 つの設定は
HTTP リクエスト データ (GET、POST、COOKIE) に影響します。実行時に変更することはできません。 PHP のデフォルト値は on です。
これをオンにすると、GET、POST、COOKIE で渡されたデータが自動的にエスケープされます。
test.php?id=abc'de"f など
echo $_GET['id'] # abc'de"fを取得します
magic_quotes_gpc=On; これをオンにすると、データベースへの書き込みには影響しません。たとえば、上記の $_GET['id'] がデータベースに書き込まれた場合でも、abc'de"f になります。
逆に、magic_quotes_gpc=Off; の場合、文字には引用符 (一重引用符か二重引用符に関係なく) が含まれている必要があり、mysql に直接書き込むと直接空白になります
オンにすると、データベースやテキスト ファイルなどの外部ソースからデータを取得して返すほとんどの関数は、バックスラッシュでエスケープされたデータを返します。このオプションは実行時に変更でき、PHP のデフォルト値はオフです。
オンにすると、一重引用符はバックスラッシュの代わりに一重引用符を使用してエスケープされます。このオプションは、magic_quotes_gpc を完全にオーバーライドします。両方のオプションを同時にオンにすると、一重引用符は " にエスケープされます。二重引用符、バックスラッシュ、NULL 文字はエスケープされません。
私のフォームの内容は元々:
対策1:php.iniファイルを修正する(php.iniの修正方法については触れませんので、ググってみてください)
対策2:エスケープを中止する
ステップ 1: $_POST['content'] などの送信したデータを見つけて、それを $content=stripslashes($_POST['content']); に変更します
ステップ 2: 将来的には、$POST['content'] を $content に置き換えます
ステップ 3: データベースに送信します。データベース ストレージはまだ正常です: 読んでまた出てきました
(これを解決する方法を知っているはずですよね?やめたらどうですか?くどいですか?
ステップ 4:stripslashes() を使用して、データベースから読み取られたコンテンツをフィルタリングします。tripslashes() この関数は、addslashes() 関数によって追加されたバックスラッシュを削除します。データベースまたは HTML フォームから取得したデータをクリーンアップするために使用されます
(
PHP ページで次の状況が発生したくない場合:
一重引用符は '
としてエスケープされます 二重引用符は「」としてエスケープされます
次に、次の設定を行って防止できます:
php.iniで設定: magic_quotes_gpc = Off)
要約は次のとおりです:
1. magic_quotes_gpc=on
,の場合 入出力データベースの文字列データでは何もできません addslashes() およびtripslashes() の操作では、データは通常どおり表示されます。
このとき入力データに対してaddslashes()を実行すると、
次に、出力時にstripslashes()を使用して余分なバックスラッシュを削除する必要があります。
2. magic_quotes_gpc=offの場合
入力データを処理するにはaddslashes()を使用する必要がありますが、出力のフォーマットにはstripslashes()を使用する必要はありません addslashes() はデータベースにバックスラッシュを書き込まないため、mysql が SQL ステートメントの実行を完了するのに役立つだけです。