Магические цитаты выключены, до сих пор

У меня есть переменные $_POST, поступающие из тегов, которые имеют косую черту в кавычках. Я знаю, что магические кавычки отключены, и использую оператор if (get_magic_quotes_gpc()), чтобы убрать лишние черты в случае их появления. Тем не менее, косые черты все еще добавляются. Это почему?

форма

<form method="POST" action="">
<input type="text" name="spe_set" />
<input type="submit" value="Submit" />
</form>

PHP

print_r($_POST['spe_set']); // if I wrote "Test's", this prints as "Test\'s"

Так я и сделал,

if ( get_magic_quotes_gpc() )
    $tempvar = stripslashes($_POST['spe_set']);
else
    $tempvar = $_POST['spe_set'];

print_r($tempvar); // Still says "Test\'s"

3 ответа

Решение

Я не могу найти ссылку в Интернете на get_magic_quotes_gpc() возвращать неверный результат в любом месте онлайн, поэтому вместо этого я дам вам контрольный список, чтобы попытаться сузить проблему (вероятно, это должен быть комментарий, но он слишком длинный для этого):

Первое, что я хотел бы сделать, это попытаться отредактировать php.ini файл, чтобы гарантировать, что magic_quotes_gpc действительно выключен. Лучшее место, чтобы попробовать это - создать / отредактировать php.ini файл в том же каталоге, что и сценарий, в котором возникают проблемы, так как это последнее место, где вы можете переопределить настройку INI перед тем, как перейти к сценарию (и global_quotes_gpc не может быть переопределено ниже, чем это, поскольку к моменту запуска сценария ущерб уже сделано).

В вашем php.ini файл, добавьте следующие строки:

magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off

Только первая из них будет влиять на переменные POST ("gpc" означает "Get, Post и Cookies"), но хорошо установить их все, так как они все отстой.

После установки этих строк вы можете быть уверены, что магические кавычки действительно отключены. Если это решит проблему, то вам нужно пройтись по структуре каталогов в первую очередь, чтобы найти, где она была включена. Это может быть в более высоком каталоге php.ini файл, .htaccess файл, или даже ваш http.conf файл. Вы можете привлечь вашего хозяина, если вы не уверены, что вы делаете здесь.

Если проблема не устраняется, проверьте наличие звонков на addslashes() функция в вашем сценарии. Это легко, если вы используете Linux, так как вы можете запустить команду grep -ir "addslashes" * из корневого каталога для вашего проекта. Если вы работаете в Windows, вы должны изучить Cygwin, unxutils или другой unix-слой. Я очень люблю unxutils, и это одна из первых вещей, которые я устанавливаю в Windows или на новую работу.

Несмотря на то, что я не понимаю, почему в какой-либо структуре есть что-то подобное, я полагаю, что какой-то идиот может попробовать это. По этой причине, вы должны убедиться, что вы grep поверх ваших файлов фреймворка. Обязательно проверьте любой php.ini файлы, предоставляемые с платформой, хотя это должно быть описано в том, что я уже описал выше.

Наконец, вы должны убедиться, что error_reporting в E_ALL | E_STRICT, Это можно сделать из php.ini файл или используя error_reporting() функция. Убедитесь, что это установлено до запуска любого другого PHP. Вы всегда должны разрабатывать с самой высокой настройкой отчетов об ошибках, чтобы вы могли видеть каждую ошибку, независимо от того, насколько она мала, до того, как она появится перед пользователем. Чтобы убедиться, что вы видите эти ошибки, также убедитесь, что ошибки отображения также включены.

Хотя пример кода, который вы вставили в свой вопрос, действителен, я упомянул error_reporting на тот случай, если это не прямое копирование / вставка из вашего кода, или на случай, если есть какой-то другой код, вызывающий ошибку. Установив отчет об ошибках, вы можете увидеть любые ошибки, которые могут блокировать правильное функционирование get_magic_quotes_gpc() или же stripslashes(), Если вы сможете исправить эти ошибки, остальная часть вашего кода будет работать так, как задумано.

Удачи.

Иногда вы находитесь в тупой старой системе, такой как старая xtcommerce. есть файл /admin/includes/functions/compatibility.php с функцией, которая выполняет "магию" самостоятельно:

if (!get_magic_quotes_gpc()) {
    do_magic_quotes_gpc($_GET);
    do_magic_quotes_gpc($_POST);
    do_magic_quotes_gpc($_COOKIE);
}

Вы должны остановить это, отредактировав условие или удалив его.

Попробуй этот код

$tempvar = str_replace('\\', '', $_POST['spe_set']);

это должно раздеть их определенно

Другие вопросы по тегам