0

したがって、基本的に、John's bike のようにアポストロフィを付けて入力すると、John\'s bike がエコーされます。以下のコード:

<?php
$searchname = $_POST["name"] ;
echo "$searchname";

私のフォームは POST メソッドを使用しています。これを止める方法はありますか?

また、入力の大文字と小文字を区別しないようにするには、このセグメントでどのようにすればよいでしょうか?

$searchsport = $_POST['sport'];
$sportarray = array(
"Football" => "Fb01",
"Cricket" => "ck32",
"Tennis" => "Tn43",
);
if(isset($sportarray[$searchsport])){
header("Location: ".$sportarray[$searchsport].".html");
die;
}
    //what code is needed to make the if statement work? I've looked up some weird ways such as using array_change_key_case (which I clearly don't understand).
4

5 に答える 5

5

これは、魔法の引用符がオンになっていることが原因である可能性が最も高いです。これを試してください。

if (get_magic_quotes_gpc())
{
  $searchname = stripslashes($_POST["name"]);
  echo "$searchname";
}
else
{
  $searchname = $_POST["name"];
  echo "$searchname";
}

実際、代わりに関数を作成して、自動的に実行することもできます。

function fixIt($str)
{
    if (is_array($str))
    {
        foreach ($str as &$value)
        {
            $value = fixIt($value);
        }

        return $str;
    }
    else
    {
        return stripslashes($str);
    }    
}

そして、あなたは簡単に行うことができます:

$searchname = fixIt($_POST["name"]);
echo $searchname;

注: php.ini から醜いマジック クォートを無効にすることもできます。これは、問題があり、当然非推奨であり、PHP の将来のバージョンから除外されるためです。

于 2010-05-23T12:55:19.433 に答える
4

いくつかの方法があります。

  1. php.ini でmagic_quotes_gpcをオフにします

    magic_quotes_gpc = 0
    
  2. リクエストの最初に、stripslashes を実行します

    if (get_magic_quotes_gpc() && !function_exists('FixMagicQuotesGpc')) {
        function FixMagicQuotesGpc($data) {
            if (is_array($data)) {
                foreach ($data as &$value) {
                    $value = FixMagicQuotesGpc($value);
                }
                return $data;
            } else {
                return stripslashes($data);
            }
        }
        $_GET = FixMagicQuotesGpc($_GET);
        $_POST = FixMagicQuotesGpc($_POST);
        $_REQUEST = FixMagicQuotesGpc($_REQUEST);
    }
    

編集: !function_exists 部分を追加しました。このように、以前に実行したかどうかを心配する必要はありません。既に実行されている場合はスキップされます (別のファイルなどによって)。

于 2010-05-23T13:01:19.000 に答える
2

これはmagic_quotes_gpc構成変数によって制御されます。それは本当に面倒です(そして非推奨です!)。

でオフにするphp.iniか、ウェブ ホストに問い合わせて対処してください。

できない場合は、 and を使用addslashesstripslashesて手動でエスケープ/エスケープ解除できます。addslashesただし、注意してください。データベースへの送信よりも安全なものを使用する必要があります。mysql_real_escape_stringより良いオプション、またはデータベースに固有の機能です。

于 2010-05-23T12:56:12.917 に答える
0

必要に応じて魔法の引用符を修正するために、構成ファイルに次のスクリプトを含めます。そうすれば、ホストの魔法の引用符の設定について心配する必要はありません。

<?php

set_magic_quotes_runtime(0);

function _remove_magic_quotes(&$input) {
    if(is_array($input)) {
        foreach(array_keys($input) as $key) _remove_magic_quotes($input[$key]);
    }
    else $input = stripslashes($input);
}
if(get_magic_quotes_gpc()) {
    _remove_magic_quotes($_REQUEST);
    _remove_magic_quotes($_GET);
    _remove_magic_quotes($_POST);
    _remove_magic_quotes($_COOKIE);
}

return true;

?>
于 2010-05-24T14:45:01.960 に答える
0

魔法の名言... PHP 6 がついに登場し、この非互換性の怪物が取り除かれたら、私はとても嬉しく思います。

最善の解決策は、php.ini で設定してオフにすることです。

magic_quotes_gpc = Off

php.ini にアクセスできないが Apache を使用している場合は、.htaccessファイルで無効にすることもできます。

php_flag magic_quotes_gpc Off

最後の溝のシナリオは、アプリケーションでそれを無効にすることです。PHP マニュアルのDisabling Magic Quotesページでは、これを使用することが提案されています。

<?php
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);
}
?>
于 2010-05-24T14:53:44.033 に答える