Как обеспечить переменные, представленные в UTF8, используя jquery $ .post - PullRequest
6 голосов
/ 24 августа 2011

Я борюсь с этим уже три дня, и это то, что я получил, и я не могу понять, почему я вижу это поведение.

Моя проблема в том, что у меня есть MySql db с набором символов и сопоставлением, определенным как utf8_general_ci. когда я запрашиваю базу данных в delete.php, как это "DELETE FROM countryNames WHERE country = '$name'"

указанная строка не удаляется. я устанавливаю переменную $ name в delete.php через переменную post $name=$_post['data']. в основном $ name получает значение в испанских символах, например, español, México и т. д. файл delete.php вызывается из main.php.Если я отправляю сообщение из main.php $.post("delete.php", {data:filename});, запрос не удаляет запись (хотя строка 'filename' находится в utf8), но если я создаю форму, а затем публикую свою переменную данных в main.php, запрос работает !! большой вопрос для меня, почему я должен отправить форму для запроса на работу? Что я вижу, так это то, что моя база данных отклоняет значение, если оно поступает от пост-вызова jquery, но принимает его, когда оно отправлено из отправленной формы. (Я не изменяю код для запроса на выполнение. Просто отправьте значение, отправив форму)

Ответы [ 4 ]

2 голосов
/ 24 августа 2011

Прежде всего, чтобы увидеть, какая кодировка используется для запросов, установите что-то вроде Firebug и проверьте заголовок «Content-Type» вашего запроса / ответа.Это будет выглядеть примерно так: 'application / json;кодировка = ... '.Это должно быть charset=utf-8 в вашем случае.

Я думаю, почему это работало при публикации формы, вероятно, из-за x-www-form-urlencoded - не алфавитно-цифровые символы дополнительно кодируютсяна стороне клиента и снова декодируется на сервере, в этом и заключается разница между непосредственным размещением данных.

Это означает, что где-то работает неправильная кодировка.PHP по умолчанию обрабатывает ваши строки независимо от их кодировки, поэтому я бы предпочел исключить их как источник ошибки.jQuery.post также использует UTF-8 по умолчанию ... поэтому я подозреваю, что это переменная filename.Вы уверены, что это в UTF-8?Где и как вы его извлекаете?

Вероятно, вам также следует убедиться, что фактическая HTML-страница также отправляется как UTF-8, а не, скажем, iso-8859-1.Посмотрите на эту статью для подробного объяснения того, как сделать это правильно.

1 голос
/ 24 августа 2011

ребята, это была проблема Mac !! Я только что проверил его на Windows, как мой сервер, и теперь все работает нормально. Так что будьте осторожны, когда вы используете Mac в качестве сервера с MySql с UTF8 в качестве набора символов и параметров сортировки. Я предполагаю, что Mac хранит папку и имя файла в некоторой другой кодировке, а не в UTF-8.

0 голосов
/ 24 августа 2011

Используйте .serialize ()! Я думаю, что это будет работать. Дополнительная информация: http://api.jquery.com/serialize/

0 голосов
/ 24 августа 2011

Вы можете ответить здесь: Как установить кодировку в .getJSON JQuery

Как там написано, используйте $.ajax вместо $.post, и вы можете установить кодировку.

ИЛИ, как сказано во 2-м ответе, используйте $.ajaxSetup для соответствующей кодировки.

...