Я выполняю запрос AJAX к скрипту PHP в JavaScript и с помощью библиотеки jQuery.
Вот моя команда, которая выполняет запрос AJAX:
$.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é";
Вот подпись функции callexionAjaxError callback:
function connexionAjaxError(jqXHR, textStatus, errorThrown)
Мой PHP-результат соответствует строке «été».
Внутренняя кодировка PHP – это ISO-8859-1, поэтому строка результата кодируется [e9 74 e9] в шестнадцатеричной системе.
Но jqXHR.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 для символа «é» со следующего веб-сайта: http://www.utf8-chartable.de/
Я делаю много развития на испанском языке, и я заметил несколько вещей, которые могут вам помочь, поскольку я уже прошел через это:
Кодировка в функции заголовка должна быть UTF-8.
Кроме того, сам FILE (скрипт PHP) должен быть сохранен в UTF-8, вы можете легко достичь этого, если вы отредактируете файл с помощью Notepad ++ и выберите кодировку UTF-8 без спецификации.
То же самое касается ваших javascript и HTML-файлов, все они должны быть закодированы с помощью UTF-8 без спецификации, а не ANSI.
Дай мне знать!
Попробуйте установить Contenttype, как это в вашем вызове, насколько я знаю jQuery Ajax всегда utf-8, если не указано.
$.ajax({ ... datatype: "text", contentType: "application/x-www-form-urlencoded;charset=ISO-8859-1", error: connexionAjaxError, success: connexionAjaxSuccess, type: "POST", ... });
Изменить: если мой ответ не поможет, это может помочь, если вы проверите конфигурацию набора символов сервера, а также разместите его.