PHP продолжает избегать ввода моей формы (добавляя \ позади моего ') - PullRequest
0 голосов
/ 23 мая 2010

Так что, в основном, когда я набираю что-то с апострофом, например, велосипед Джона, это повторяет велосипед Джона. Код ниже:

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

Ответы [ 5 ]

5 голосов
/ 23 мая 2010

Это наиболее вероятно, потому что у вас есть магические кавычки , попробуйте это:

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.

4 голосов
/ 23 мая 2010

Есть несколько способов.

  1. Отключить magic_quotes_gpc в php.ini

    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. Таким образом, вам не нужно беспокоиться, если вы запускали его раньше, он просто пропустит его, если он уже был запущен (другим файлом и т. Д.)

2 голосов
/ 23 мая 2010

Управляется переменной конфигурации magic_quotes_gpc. Это действительно раздражает (и не рекомендуется!).

Вы должны отключить его в php.ini или спросить вашего веб-хоста, могут ли они что-то с этим сделать.

Если они не могут, вы можете использовать addslashes и stripslashes для ручного побега / побега. Однако будьте осторожны - вы должны использовать что-то более безопасное, чем addslashes для отправки в базу данных. mysql_real_escape_string - лучший вариант или функция, специфичная для вашей базы данных:

0 голосов
/ 24 мая 2010

Магические кавычки ... Я буду очень рад, когда наконец выйдет PHP 6 и удалит этого монстра несовместимости.

Лучшее решение - отключить его в php.ini, установив

magic_quotes_gpc = Off

Если у вас нет доступа к php.ini, но вы используете Apache, вы также можете отключить его в файле .htaccess:

php_flag magic_quotes_gpc Off

Последний сценарий - отключить его в вашем приложении. На странице Отключение магических кавычек * в Руководстве по PHP предлагается использовать это:

<?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);
}
?>
0 голосов
/ 24 мая 2010

Я включаю следующий скрипт в мой файл конфигурации, чтобы при необходимости исправить магические кавычки. Таким образом, мне не нужно беспокоиться о настройках магических кавычек хоста.

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

?>
...