Я отправляю форму в свою базу данных 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"; }
Я понимаю, что это в основном тот же ответ, что и выше, но для меня это выглядело скорее моим стилем. Надеюсь, это поможет другим в той же лодке, что и я.