0

私はURLtest.php?value=%22hello%22をGETしていて、値を印刷すると表示さ\"hello\"$_REQUEST['value'][0]\. なんで?これを(正しく)修正するにはどうすればよいですか?

4

2 に答える 2

4

最も可能性の高い理由は、魔法の引用符がオンになっていることです。あなたがすべき:

  • PHP 5.4または
  • PHP 構成ファイルでそれらを無効にするか、
  • Apache構成でそれらを無効にする(同じリンク)または
  • (最後の手段)オンになっているかどうかをテストしてからstripslashes、入力をオーバーランします。
于 2013-04-22T20:03:43.677 に答える
1

環境が再構成を許可することを保証できない場合は、この再利用可能なコードを使用して、$_GET、$_POST 配列を再帰的に掘り下げ、ストリップスラッシュでそれらをクリーンアップできます。

class de_slasher {

    function recursive_stripslashes($a) {
        $b = array();
        foreach( $a as $k => $v ) {
            $k = stripslashes($k);
            if( is_array($v) ) {
                $b[$k] = $this->recursive_stripslashes($v);
            } else {
                $b[$k] = stripslashes($v);
            }
        }
        return($b);
    }

    function check_and_fix_magic_quotes( &$array ) {
        if( get_magic_quotes_gpc() ) {
            $array = $this->recursive_stripslashes( $array );
        }
    }

    function __construct( $auto = false ) {
        if( $auto === true ) {
            $this->check_and_fix_magic_quotes( $_POST );
            $this->check_and_fix_magic_quotes( $_GET );
        }
    }
}

使用するには、単にクラスをインクルードし、呼び出し$slasher = new de_slasher(true);て $_GET と $_POST を自動的にクリーンアップします。これは、マジック クォート設定がオンの場合にのみ発生します。「true」パラメーターを指定せずにクラスをインスタンス化すると、任意の配列を選択的にディープ フィルター処理できます。

$my_array = array( "name" => "Herbert\'s Apple" );
$slasher = new de_slasher();
$slasher->check_and_fix_magic_quotes( $my_array );
于 2013-04-22T20:27:30.890 に答える