Сохранение двойных и одинарных кавычек и экранирующих символов при вставке в mysql - PullRequest
1 голос
/ 10 декабря 2010

У меня проблема при вставке в mysql.

У меня есть многомерный массив в javascript, который преобразуется в строку в формате JSON.Например, строка выглядит следующим образом:

[["text1","text2","te'xt with apostroph'e"],["subarray2","a \u000a unicode number","change line \n \n"]]

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

Если я отправлю это из javascript в php через ajax и расшифрую его в php, все будет прекрасно, никаких проблем, идеально.

Проблема возникает, когда янужно вставить его в mysql.

  1. magic_quotes отключен везде в php.ini
  2. Я использую функцию mysql_real_escape_string перед тем, как вставить в mysql

Ночто бы я ни делал, вставка прошла успешно, но в базе данных двойные кавычки преобразуются в одинарные, а также исчезают символы \.

Итак, внутри базы данных у меня осталось следующее:

[['text1','text2','te'xt with apostroph'e'],['subarray2','a u000a unicode number','change line n n']]

Это, конечно, проблема, так как мне нужно сохранить двойные кавычки, чтобы, когда я позже прочитал это из php, я мог декодировать JSON и при этом сохранить одинарные кавычки.внутри текста.Также новая строка \n и символы Unicode \u000a больше не работают, поскольку escape-символы исчезли.

Я нашел способ использовать htmlspecialchars($thephrase, ENT_QUOTES);, который преобразует двойные кавычки в &quot.Это, по крайней мере, сохраняет мои двойные кавычки и одинарные кавычки, но это, очевидно, не идеальное решение, плюс я все еще теряю escape-символы \.

Что-то явно не так в том, что я делаю илиКонфигурация, проблема не связана с JSON, если я просто вставляю напрямую в mysql двойные и одинарные кавычки, двойные преобразуются в одинарные.

Так что, в любом случае, вопрос в тексте, гдеУ меня есть двойные кавычки, одинарные кавычки, escape-символы и символы новой строки, как я могу быть уверен, что, когда я вставлю все это в mysql, я сохраню все из них в mysql varchar или текстовом поле;двойные кавычки, одинарные кавычки, \ escape-символы и символы новой строки?

Я убедился, что magic_quotes везде в php.ini

Большое спасибо за любой совет или помощь.

1 Ответ

1 голос
/ 26 января 2011

К настоящему времени вы должны были решить вашу проблему. Для дальнейшего использования, я думаю, вы искали php's addlashes () или более конкретную mysqli_real_escape_string () Эти функции будут экранировать символы, которые должны быть заключены в кавычки в запросах к базе данных.

На заметку, я бы порекомендовал вам написать ваши вопросы как можно более краткими. Люди склонны пропускать огромные заветы.

...