PHP (benim 'arkasından \ ekleyerek) benim formun girişi kaçan tutar

5 Cevap php

Böyle John'un bisiklet gibi bir kesme işareti, bir şey yazdığınızda Yani temelde John \ 'nin motosikletini yankılanacak. Aşağıdaki kodu:

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

Benim formu POST yöntemini kullanır. Bu durdurmak için herhangi bir yolu var mı?

Ayrıca ne ben bu segmentte gitmek girişi harf duyarsız yapmak için?

$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).

5 Cevap

Eğer açık magic quotes , bu deneyin, çünkü bu büyük olasılıkla:

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

Aslında, sizin için otomatik olarak yapmak yerine bir işlev oluşturabilirsiniz:

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

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

Ve o zaman sadece yapabilirsiniz:

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

Onlar sorunlu ve haklı olarak kalktı ve PHP gelecek sürümleri dışında olduğu gibi Note: Ayrıca php.ini gelen çirkin sihirli tırnak devre dışı bırakabilirsiniz.

Bir kaç yolu vardır.

  1. magic_quotes_gpc php.ini içinde kapatın

    magic_quotes_gpc = 0
    
  2. Istek başında, stripslashes çalıştırın

    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);
    }
    

EDIT:! Function_exists bölümünü eklendi. Bu şekilde, size önce koştum eğer o zaten çalıştırmak oldu ise, sadece (başka bir dosya vb) o atlamak olacak endişelenmenize gerek yok

Ben gerekirse sihirli tırnak gidermek için benim Yapılandırma dosyası içinde aşağıdaki komut dosyası içerir. Ben büyü hakkında endişelenmenize gerek yok Bu şekilde ana ayarlarını aktarır.

<?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;

?>

PHP 6 nihayet uyumsuzluk bu canavar geldiğinde ve kaldırır Sihirli Tırnaklar ... Ben çok mutlu olacağım.

En iyi çözüm ayarlayarak php.ini onu kapatmak için

magic_quotes_gpc = Off

Php.ini erişimi yok ama Apache kullanıyorsanız, aynı zamanda bir .htaccess dosyasında devre dışı bırakabilirsiniz:

php_flag magic_quotes_gpc Off

Son dakika senaryosu uygulama devre dışı etmektir. PHP Manual adlı Disabling Magic Quotes Sayfayı kullanarak önerir:

<?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);
}
?>