Подтвердить что ты не робот

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 ...,
    ...
    })
4b9b3361

Ответ 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();
};