Проблема «слэш перед каждой цитатой»

У меня есть php-страница, содержащая форму.

Иногда эта страница представляется сама (например, при загрузке фото).

Я бы не хотел, чтобы пользователи заполняли все поля снова и снова, поэтому я использую это как значение ввода текста внутри формы:

value="<?php echo htmlentities(@$_POST['annonsera_headline'],ENT_COMPAT,'UTF-8');?>"> 

Это работает, за исключением того, что перед каждой двойной кавычкой добавляется знак «\» …

Например, запись 19-дюймовых колес дает после того, как страница будет представлена ​​самому себе:

  19\" wheels 

И если я даже не использую htmlentities, тогда все после исчезновения цитат.

В чем проблема?

ОБНОВИТЬ:

Хорошо, поэтому проблема magic_quotes … Это включено на моем сервере …

Должен ли я отключить его? У меня есть root-доступ, и это мой сервер 🙂

Какое вред в его отключении?

Похоже, вы включили магические цитаты . Используйте условие ниже, используя stripslashes с любым текстом, который вы хотите обработать:

 if(get_magic_quotes_gpc()) { $your_text = stripslashes($your_text); } 

Теперь вы можете нормально $your_text переменную $your_text .

Обновить:

Здесь перечислены магические цитаты. Для хорошо написанного кода обычно нет вреда в его отключении.

Вероятно, у вас есть волшебные кавычки . Вам также нужны stripslashes() .

Наилучшим способом было бы обернуть это функцией:

 function get_string($array, $index, $default = null) { if (isset($array[$index]) && strlen($value = trim($array[$index])) > 0) { return get_magic_quotes_gpc() ? stripslashes($value) : $value; } else { return $default; } } 

Который вы можете использовать как

 $annonsera_headline = get_string($_POST, 'annonsera_headline'); 

Кстати:

И если я даже не использую htmlentities, тогда все после исчезновения цитат.

На самом деле это все еще в источнике HTML, вы его не видите. Сделайте View View 😉


Обновление согласно вашему обновлению: магические кавычки предназначены для предотвращения атак SQL-инъекций в коде начинающих. Вы часто это видите на сторонних хостах. Если вы действительно знаете, что делаете в коде, вы можете спокойно отключить его. Но если вы хотите, чтобы ваш код распространялся, вы действительно учитываете это при сборе параметров запроса. Для этого приведенный выше пример функции отлично подходит (вам нужно только написать функции simliar get_boolean() , get_number() , get_array() ).

Да, вы должны отключить магические кавычки, если сможете. Функция устарела и, скорее всего, полностью исчезнет в будущем. Если вы использовали магические кавычки для экранирования данных (например, при вставке их в базу данных), вы можете открыть себя до уязвимостей sql-инъекций, если вы отключите его. Вы должны проверить все свои запросы и убедиться, что используете mysql_real_escape_string() .

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

 <?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, пытающаяся быть сознательной в безопасности , к счастью, есть легкое исправление, которое выглядит примерно так:

 if (get_magic_quotes_gpc()) {$var = stripslashes($var);} 

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

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

 magic_quotes_gpc = Off 

Или следующее к вашему .htaccess:

 php_flag magic_quotes_gpc Off 

Надеюсь, это поможет разобраться.

Похоже, ваш сервер настроен на использование магических котировок .

Вы можете исправить это, сняв их с помощью stripslashes или лучше, отключив Magic Quotes .

  1. вы не должны использовать htmlentities () при записи чего-либо в значение поля ввода.
  2. включен ли magic_quotes на вашем сервере? попробуйте использовать stripslashes перед выходом.