私はURLtest.php?value=%22hello%22
をGETしていて、値を印刷すると表示さ\"hello\"
れ$_REQUEST['value'][0]
、\
. なんで?これを(正しく)修正するにはどうすればよいですか?
質問する
154 次
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 に答える