2012-03-23 3 views
1

Я выполняю запрос AJAX скрипту PHP в JavaScript и с помощью библиотеки jQuery.
Вот моя команда, которая выполняет запрос AJAX:jQuery ajax + responseText + Кодировка символов

$.ajax({ 
    async: "false", 
    cache: "false", 
    data: {login: strLogin, password: strPassword}, 
    datatype: "text", 
    error: connexionAjaxError, 
    success: connexionAjaxSuccess, 
    type: "POST", 
    url: "./Connexion" 
}); 

".Connexion" является URL перенаправления на мой PHP скрипт.
connexionAjaxError - это функция JavaScript, которая неизбежно выполняется, как только будет получен ответ HTTP.
Причина: Мой PHP скрипт приводит к текстовому/простой страницы с HTTP код статуса, равный 500.
Здесь самая соответствующая часть моего PHP скрипт:

header("HTTP/1.0 500 Internal Server Error; 
     Content-type: text/plain; 
     charset=ISO-8859-1"); 

echo "été"; 

Вот подпись connexionAjaxError функция обратного вызова:

function connexionAjaxError(jqXHR, textStatus, errorThrown) 

Результаты моего PHP для строки «été».
Внутренняя кодировка PHP - это ISO-8859-1, поэтому строка результата кодируется [e9 ​​74 e9] в шестнадцатеричной нотации.

Но jqXHRR.responseText в функции callexionAjaxError обратного вызова содержит 1-символьную строку.
Я использовал метод charCodeAt объекта JavaScript String, чтобы получить код юникода (UTF-8?) Для символа.
Символ кодируется 65535 в десятичной системе, эквивалентной [ff ff] в шестнадцатеричной системе.

Я не понимаю, почему jqXHR.responseText не содержит 3-символьную строку «été».
Я не эксперт в JavaScript, но я полагаю, что jqXHR.responseText может содержать только строку, закодированную в UTF-8.
Итак, строка «été» в jqXHR.responseText будет закодирована [c3a9 74 c3a9] в шестнадцатеричной нотации.
У меня есть получить код UTF-8 для символа «E» на следующем веб-сайте: http://www.utf8-chartable.de/

ответ

1

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

Кодировку в функции заголовка должны быть UTF-8.

Кроме того, сам файл FILE (скрипт PHP) должен быть сохранен в UTF-8, вы можете легко достичь этого, если вы отредактируете файл с помощью Notepad ++ и выберите кодировку UTF-8 без спецификации.

То же самое касается ваших файлов javascript и HTML, все они должны быть закодированы с помощью UTF-8 без спецификации, а не ANSI.

Дайте мне знать!

+0

Спасибо за ваш ответ. Теперь у меня есть лучшая идея о том, как кодируется строка ls/PHP litteral. Если кодировка ISO-8859-1 применяется к моему скрипту PHP/JS, то строчная строка «été» кодируется [e9] в шестнадцатеричной нотации. Но если кодировка UTF-8 применяется на моем скрипте PHP/JS, то литральная строка «été» кодируется [c3 a9] в шестнадцатеричной системе обозначений. Скажи мне, если я ошибаюсь. – user1139666

0

Попробуйте установить CONTENTTYPE, как это в вызове, насколько я знаю, JQuery Ajax всегда UTF-8 если не указано.

$.ajax({ 
... 
    datatype: "text", 
    contentType: "application/x-www-form-urlencoded;charset=ISO-8859-1", 
    error: connexionAjaxError, 
    success: connexionAjaxSuccess, 
    type: "POST", 
... 
}); 

Edit: Если мой ответ не полезно, это может помочь, если вы проверить конфигурацию сервера кодировок, а также разместить его.

+0

Согласно документации jQuery по адресу: http://api.jquery.com/jQuery.ajax/ Параметр contentType применяется только к данным, отправленным на сервер. Но моя проблема касается данных, полученных с сервера. Я запустил функцию mb_internal_encoding в одном из своих PHP-скриптов. Функция mb_internal_encoding вернула «ISO-8859-1». Следовательно: [1] строка результата «été» закодирована [e9 74 e9] в шестнадцатеричной нотации. [2] Я указал «charset = IS0-8859-1» в заголовке моего HTTP-ответа. – user1139666

Смежные вопросы