一般的なスペースプロバイダーが提供するサーバースペースのデフォルトのPHPコマンドmagic_quotes_gpcはon、つまりオンになっています。この時点で、stripslashes() 関数を使用して、自動的に追加されたバックスラッシュを削除できます。使用法は次のとおりです。たとえば、文字列を含む変数が $str の場合、stripslashes() 関数を使用して文字列を処理します (stripslashes($str))。出力結果はバックスラッシュが削除されたものになります。
出力結果にバックスラッシュが含まれている場合は、stripslashes() 関数を使用して出力コンテンツを処理できます ($str=stripslashes($str))。出力コンテンツに含まれるバックスラッシュを保存して削除します。
しかし、別の問題があります。つまり、ローカルの PHP コマンド magic_quotes_gpc がオフになっているため、この関数を使用すると、通常のバックスラッシュが削除されてしまいます。これは私たちが望んでいることではありません。
解決策は、関数 get_magic_quotes_gpc() を使用してそれを検出することです。開いた状態の場合、バックスラッシュは削除されます。閉じた状態の場合、バックスラッシュは削除されません。
プログラムコードは次のとおりです:
1 | $str=$_POST["str"]; //读取str的内容赋值给$str变量 |
2 | if(get_magic_quotes_gpc()){ //如果get_magic_quotes_gpc()是打开的 |
3 | $str=stripslashes($str); //将字符串进行处理 |
4 | } |
この記事は2012年4月25日 10時08分03秒に次のように修正されました:
この問題を解決するには、次の 3 つの方法があります:
1 PHP 設定ファイル php.ini
を変更します
この方法は、サーバーを管理する権限がある場合にのみ適しています。仮想空間を使用する場合は、最後の 2 つの方法のみを使用できます。
PHP 構成ファイル php.ini で、magic_quotes_gpc、magic_quotes_runtime、および magic_quotes_sybase を off に設定します。以下に示すように:
1 | magic_quotes_gpc = Off |
2 |
3 | magic_quotes_runtime = Off |
4 |
5 | magic_quotes_sybase = Off |
2 .htaccess ファイルを使用します
このメソッドは、サーバーが htaccess をサポートしている場合にのみ機能します。htaccess は現在のサーバーで通常サポートされています
プログラム ディレクトリの .htaccess ファイルに次の文を追加します:
1 | php_flag magic_quotes_gpc Off |
3. コード内の
をブロックする
この方法は最も移植性が高く、PHP をサポートしていればサーバー構成を考慮せずに使用できます。
すべての PHP ファイルの先頭に次のコードを追加します
01 | if(get_magic_quotes_gpc()){ |
02 | function stripslashes_deep($value){ |
03 | $value=is_array($value)?array_map('stripslashes_deep',$value):stripslashes($value); |
04 | return $value; |
05 | } |
06 | $_POST=array_map('stripslashes_deep',$_POST); |
07 | $_GET=array_map('stripslashes_deep',$_GET); |
08 | $_COOKIE=array_map('stripslashes_deep',$_COOKIE); |
09 | $_REQUEST=array_map('stripslashes_deep',$_REQUEST); |
10 | } |