JQuery AJAX не отправляет UTF-8 на мой сервер, только в IE
Я отправляю UTF-8, японский текст, на свой сервер.
Он работает в Firefox. Мои access.log и заголовки:
/ajax/?q=%E6%BC%A2%E5%AD%97
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Content-Type application/x-www-form-urlencoded; charset=UTF-8
Howeer, в IE8, мой access.log говорит:
/ajax/?q=??
По какой-то причине IE8 превращает мой вызов AJAX в вопросительные знаки. Зачем!? Я добавил атрибут scriptCharset и ContentType в соответствии с некоторыми учебниками, но до сих пор не повезло.
И это мой код:
$.ajax({
method:"get",
url:"/ajax/",
scriptCharset: "utf-8" ,
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
data:"q="+query ...,
...
})
Ответы
Ответ 1
Попробуйте кодировать параметр запроса с помощью encodeURIComponent()
data:"q="+encodeURIComponent( query )
так как bobince очень правильно отметил в своем комментарии, если вы используете нотацию объекта для передачи параметров в метод ajax, он будет обрабатывать сама кодировку.
так
data:{ q : query }
сделает jQuery обработкой кодировки..
Ответ 2
Я прочитал этот пост, надеясь, что он решит проблему, с которой я столкнулся, и это связано с преобразованиями utf8.
В моем случае оказалось, что движок сервера (node.js) вычисляет длину содержимого данных с данными, считающимися необработанными, а не utf8, поэтому два символа с расширенными символами в uft8 вычислялись так, как если бы где один char приводит к тому, что сервер слишком мало передает один символ.
Посмотрите, что я сделал, чтобы решить эту проблему здесь: Неправильно сформированный Json при отправке в CouchDB
Ответ 3
Я знаю, что это старый пост, но у меня была эта проблема в последнее время, и я хотел бы внести вклад, если у кого-то другая проблема.
Я использую PHP, но я уверен, что есть опция на каждом сервере. Это было всего лишь несколько вещей:
-
Убедитесь, что вы отправляете правильные заголовки на свой ответ ajax, добавляя заголовок ('Content-Type: text/html; charset = utf-8'); Это должна быть ваша первая строка. Если у вас есть какие-либо ошибки, говорящие, что заголовки уже отправлены или что-то в этом роде, потому что где-то в вашем коде вы выдаете дополнительное пространство или что-то перед отправкой заголовка, проверьте свой код.
-
Когда вы создаете ответ на своем сервере, убедитесь, что вы конвертируете все свои символы в HTML-код соответствия char с помощью echo htmlentities ($ your-string, null, 'utf-8); Поскольку даже после того, как я сказал IE, что вы отправляете данные utf-8, кажется, что IE забывает об этом или не просто принимает на себя что-либо, поэтому добавление этого кода приведет к правильному выводу.
Спасибо всем за вашу помощь.
Ответ 4
Используйте encodeURIComponent()
в javaScript. Вот пример:
function doPost()
{
var URL = "http://localhost/check.php?yab=" + encodeURIComponent(document.getElementById("formSearch").childNodes[1].value);
xmlHttp.open("GET", URL);
xmlHttp.send();
};