Intereting Posts
Неустранимая ошибка: превышено максимальное время выполнения 500 секунд Проблема с установкой компоновщика Windows Codeigniter – я ищу для использования / подключения к другой базе данных для одного из моих контроллеров и одной модели PHP открыть другую веб-страницу с данными POST PHP POST с заголовком () и проблемами с плохим заголовком Как получить последние видео с нескольких каналов Youtube в одном API-интерфейсе Вызов неопределенной функции curl_init ().? Что неожиданный T_VARIABLE в PHP? Клиент / сессия Magento не работает https запрос в другой домен с перенаправлением с использованием php Как поделиться сеансом между NodeJs и PHP с помощью Redis? удаление всех символов из строки, оставляя номера Как получить координаты нескольких точек на круге с php Преобразование динамического PHP / mySQL-сайта в архивную версию HTML? Публикация на страницу Facebook из приложения Facebook без входа в facebook

jQuery ajax + responseText + Кодировка символов

Я выполняю запрос 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", ... }); 

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