2011-02-02 14 views
0

サーバにはマジッククォートがあり、何らかの理由でオフにすることはできません.....現在、stripslashesはマジッククォートで追加されたすべてのスラッシュを削除しますが、 (私たちはスラッシュを許可しています)、stripslashesもそれを削除します。マジッククォートの回避策PHPのGpc

私は{ "、」}それが先行する場合にのみ、スラッシュを削除します正規表現のためにしようとしています....

任意の助けをいただければ幸いです

+0

あなたの質問は、魔法の引用符を無効にする方法でなければならないと思います。 –

+0

no ..私はそれをオフにしたくない.....むしろ私はcannot..with魔法の引用符で、私は元の入力.. .hope uは何を言っているのですか –

+0

* "... stripslashes **はそれをも削除します" * ...?あなたは推測ですか、試してみましたか? – deceze

答えて

1

私はこのコードを使用設定ファイル:

// remove slashes, if they are being automatically added 
if (get_magic_quotes_gpc()) { 
    $_GET = array_map('stripslashes', $_GET); 
    $_POST = array_map('stripslashes', $_POST); 
    $_COOKIE = array_map('stripslashes', $_COOKIE); 
    $_REQUEST = array_map('stripslashes', $_REQUEST); // see ThiefMaster's comment 
} 

私はスラッシュを心配する必要は唯一の場所だ他のすべての場所で、私は無事にない「マジッククオート」は存在しないと仮定することができ

けれども、。は配列では機能しませんので、$ _GET、$ _POST、$ _COOKIE(配列を持つことを期待しています)の配列を値として持つことが期待される場合、この関数をコールバックとして使用できます:

function stripslashes_recursive($value) { 
    if (is_array($value)) { 
     return array_map(__FUNCTION__, $value); 
    } 
    return stripslashes($value); 
} 

PHP 5.3のユーザーは、コールバックとしてクロージャを使用する可能性があります:

$stripslashes = function($value) use(&$stripslashes) { 
    if (is_array($value)) { 
     return array_map($stripslashes, $value); 
    } 
    return stripslashes($value); 
}; 

これは、追加機能(stripslashes_recursive())とのグローバルスコープを汚染しません。

+0

**あなたは '$ _REQUEST' **を忘れました。 – ThiefMaster

+0

@ThiefMaster、本当に、私は$ _REQUEST配列を使っていません。しかし、他の人がそれを使うなら、それもそれを含めるべきです。 – binaryLV

+0

@binaryLV: "配列を値として持つことが期待される場合"これが設定ファイル内にある場合、予期せぬことを予想してマッピング機能を実行するのが最良ではないでしょうか? –