0

Phpで処理するhtmlフォームがあります。フォームを送信すると、たとえば5 rue de l'ourqと書くとバックスラッシュが表示されます。フォームの他のフィールドを間違って入力したために再度フォームを送信すると、5 rue de l\'ourqと再び5 rue de l\'ourq が表示されます。これは、住所フィールドで発生しました。

Php 変数:

$address = $_POST['address'];   
$title = inputvalid($_POST['title']);   
$f_name = inputvalid($_POST['f_name']);

問題は $address 変数です。バックスラッシュを表示する理由はわかりません。そのため、その変数にinputvalid関数を入れませんでしたが、これを修正できません。何か案が ?

4

5 に答える 5

6

magic_quotes がオンになっているようですね。PHP設定でそれらをオフにする必要があります。

magic_quotes をオフにできない場合、inputvalid()関数が最初に行うことは、magic_quotes が有効になっているかどうかを確認することstripslashes()です。

http://php.net/manual/en/security.magicquotes.disabling.php

上記のリンクによると、次のコードを追加することで実行時の無効化をシミュレートできますが、実際には上記と同じことを行っているだけで、magic_quotes がstripslashes()入力配列でオンになっているかどうかを確認しています。

if (get_magic_quotes_gpc()) {
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process)) {
        foreach ($val as $k => $v) {
            unset($process[$key][$k]);
            if (is_array($v)) {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            } else {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}
于 2013-03-29T13:15:20.677 に答える
0

'PHP は、文字通り文字列の開始を意味するため、エスケープするためにバックスラッシュを追加します。

stripslashes()それらを削除するために使用します。

于 2013-03-29T13:15:33.810 に答える
0

関数inputvalidは、データベースから情報を読み込んで変更するために使用される SQL インジェクションを防止しています。機能はエスケープ'"、インジェクションを防ぎます。コードは、データベースから情報を読み込んだ後、これらのエスケープされた文字を人間が読める形式に変換できる必要があります。

于 2013-03-29T13:15:53.320 に答える
0

これを設定ファイルに入れます:

ini_set('magic_quotes_gpc', 'off');

または、これがサーバーで許可されていない場合は、これを構成に入れます。

##/ Special Code to stop get_magic_quotes_gpc
function stop_magic_quotes($in)
{
    $out = $in;

    if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
    {
        if(is_array($out))
        {
            foreach($out as $k=>$v)
            {
                $v = stop_magic_quotes($v);
                $out[$k] = $v;
            }
        }
        else
        {
            $out = stripslashes($out);
        }
    }

    return $out;
}//end func................

if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
{
    $_GET = array_map('stop_magic_quotes', $_GET);
    $_POST = array_map('stop_magic_quotes', $_POST);
}//end if....
于 2013-03-29T13:17:17.120 に答える
0

私のコメントからこの質問へ:

magic_quotes_gpcphp.ini ファイルのオプションを確認して、に設定しOffます。php プロセスを再起動することを忘れないでください。php.ini ファイルに直接アクセスできない場合は、次のことを試してください。

 <?php ini_set('magic_quotes_gpc', 'Off'); ?>
于 2013-03-29T13:17:57.513 に答える