Я отправляю форму своей базе данных 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...'
подходит в моей базе данных как:
Привет, моим именем является Jascha и мой \, "любимая" вещь сделать спать
Кого я говорю, что сделать? (Я не могу получить доступ к 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 ()
. Использование этой функции для данных, которые уже были экранированы , дважды экранирует данные .
Я знаю, что это немного поздно, но как новичку в 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";
}
Я понимаю, что это по сути тот же ответ, что и выше, но для меня он показался более подходящим. Надеюсь, это поможет другим, находящимся в той же лодке, что и я.....