PHP Escapeing строковые переменные запроса - PullRequest
4 голосов
/ 07 апреля 2011

Я создал форму в своем веб-приложении, в которой есть только одно текстовое поле, и это поле публикуется на странице PHP с помощью GET, но я наблюдаю странное поведение.т.е. когда я тестирую его на локальном сервере, текст принимается так, как он был написан в текстовом поле, но когда я загружаю его на свой онлайн-сервер, полученная строка автоматически экранируется, все одинарные и двойные кавычки экранируются.Например, если я напишу It's not true..., то на стороне php я получу

$comment = $_REQUEST["comm"];
print $comment;
//will print It\'s not true... on my online server
//will print It's not true... on my local server

Я пока не могу понять, почему это так?Есть ли какие-либо настройки PHP для автоматического экранирования переменных строк запроса?

Ответы [ 3 ]

9 голосов
/ 07 апреля 2011

У вас включены "магические кавычки".Это ужасная ошибка, которая, к счастью, будет удалена в следующей версии PHP.Руководство по PHP содержит руководство по их отключению.

Короче говоря, вам необходимо установить следующие элементы конфигурации на Off в вашем файле php.ini:

  • magic_quotes_gpc
  • magic_quotes_runtime
  • magic_quotes_sybase

В частности, ваша проблема связана с magic_quotes_gpc - часть "gpc" сокращена для " GET , POST и COOKIE "- но это хорошая практика, чтобы все они были отключены.

2 голосов
/ 07 апреля 2011

Код расскажет вам все, что вам нужно ..

function mysql_prep($value) {
$magic_quotes_active = get_magic_quotes_gpc();
$new_enough_php = function_exists("mysql_real_escape_string"); // i.e. PHP >= v4.3.0
if ($new_enough_php) { // PHP v4.3.0 or higher
    // undo any magic quote effects so mysql_real_escape_string can do the work
    if ($magic_quotes_active) {
        $value = stripslashes($value);
    }
    $value = mysql_real_escape_string($value);
} else { // before PHP v4.3.0
    // if magic quotes aren't already on then add slashes manually
    if (!$magic_quotes_active) {
        $value = addslashes($value);
    }
    // if magic quotes are active, then the slashes already exist
}
return $value;
}

создать вышеуказанную функцию и передать значения этой функции

, а затем вызвать значения как

$yourVar = mysql_prep($_POST['yourControlName']);

Я надеюсь, что вы можете объяснить все с помощью комментариев ...

0 голосов
/ 07 апреля 2011

Я думаю, это настройка в файле php.ini.Вы можете вызвать функцию PHP, чтобы отключить ее, но к тому времени уже слишком поздно.

...