Mysql Real Escape String PHP-функция Добавление «\» в «Моя полевая запись»

Я отправляю форму в свою базу данных MySQL, используя PHP.

Я отправляю данные формы через mysql_real_escape_string($content) .

Когда запись появляется в моей базе данных (проверка в phpMyAdmin), все мои двойные кавычки и одинарные кавычки экранируются.

Я уверен, что это проблема с настройкой PHP?

так:

 $content = 'Hi, my name is Jascha and my "favorite" thing to do is sleep'; mysql_real_escape_string($content); $query = 'INSERT INTO DB...' 

появляется в моей базе данных как:

Привет, меня зовут Яша и моя «любимая» вещь – спать

Кому я расскажу, что делать? (Я не могу получить доступ к php.ini).

При получении данных запроса вам необходимо учитывать магические котировки. Если get_magic_quotes_gpc() true , тогда вам нужно запустить 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; } } 

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

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

..вместо

 $input = $_POST['input']; 

Сделайте то же самое для тривиальных вещей, таких как get_number() , get_boolean() , get_array() и т. Д.

Если вы получаете свои данные $ content из формы (а не «как есть» в PHP-коде) , возможно, у вас возникла проблема из-за кавычек Magic (см. magic_quotes_gpc )

В основном :

Когда magic_quotes включены, все ' (одинарная кавычка), " (двойная кавычка), \ (обратная косая черта) и NUL исчезают с обратной косой чертой автоматически

Если магические кавычки включены (вы можете проверить это в выводе phpinfo() , например) , вы получите такое «двойное экранирование»:

  • Эти персонажи будут сбежать один раз магическими цитатами,
  • И тогда они будут сбежать во второй раз mysql_real_escape_string

Хорошим решением в этом случае является не прекращение использования mysql_real_escape_string , а отключенная magic_quotes_gpc в вашей конфигурации …

… Но, поскольку у вас нет доступа к нему, вам действительно нужно «вернуть» эффект магических кавычек, вызывая stripslashes на входе, которое вы получаете как $_GET и $_POST , прежде чем начать использовать его ,

Примечание. Это совет, который дается на странице руководства mysql_real_escape_string (цитирование) :

Примечание. Если magic_quotes_gpc включен, сначала примените stripslashes() к данным. Использование этой функции для данных, которые уже были экранированы, приведет к двойному удалению данных.

Я знаю, что это немного поздно, но, как noob для php, мне нужно было что-то очень простое. Поэтому я использую этот код ниже, чтобы исправить проблему, описанную OP с помощью magic_quotes_gpc. У меня есть сервер под управлением php 5.2.8, а один – 5.3.

Мое веб-приложение использует datatables.net для отображения информации. Я начал получать ошибки JSON, когда данные были сохранены со специальными символами, экранированными в базе данных.

Моя машина разработки использует 5.3, где это не обязательно, но с php 5.2.8 мне нужно было использовать функцию stripslashes для сохранения значений в моей базе данных.

 $description = mysql_real_escape_string($description); // hack for php 5.2.8 // if (get_magic_quotes_gpc()) { $description = stripslashes($description); //echo "description: $description"; } 

Я понимаю, что это в основном тот же ответ, что и выше, но для меня это выглядело скорее моим стилем. Надеюсь, это поможет другим в той же лодке, что и я.