Кодировка символов JQuery AJAX - PullRequest
       42

Кодировка символов JQuery AJAX

57 голосов
/ 16 февраля 2009

Я сейчас пишу французский сайт. Есть страница расписания, где боковая ссылка может быть использована для загрузки расписания на другой день.

Вот JS, который я использую для этого:

    <script type="text/javascript">
    function load(y) {
        $.get(y,function(d) {
            $("#replace").html(d);
            mod();
        });
    }
    function mod() {
        $("#dates a").click(function() {
            y = $(this).attr("href");
            load(y);
            return false;
        });
    }
    mod();
    </script>

Фактический AJAX работает как шарм. Моя проблема заключается в ответе на запрос.

Поскольку это французский сайт, есть много букв с акцентом. Я использую кодировку ISO-8859-15 именно по этой причине. Тем не менее, в ответ на мой AJAX-запрос, акценты становятся символом?, Потому что кодировка символов, похоже, возвращается в UTF-8.

Как мне избежать этого? Я уже пытался добавить PHP в начало запрошенных документов для установки набора символов:

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>

Но, похоже, это тоже не работает. Есть мысли?

Кроме того, хотя любой из вас ищет здесь ... почему самый правый столбец, кажется, становится меньше при загрузке новой страницы, вызывая искажение таблицы и каждый <li> в пределах <td> для переноса в следующая строка?

Приветствия

Ответы [ 22 ]

62 голосов
/ 16 февраля 2009

Указание типа контента на AJAX-вызове решило мои проблемы на норвежском сайте.

$.ajax({
        data: parameters,
        type: "POST",
        url: ajax_url,
        timeout: 20000,
        contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15",
        dataType: 'json',
        success: callback
});

Вы также должны указать кодировку на сервере.

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>
23 голосов
/ 16 февраля 2009

UTF-8 должен обрабатывать все акценты и иностранные символы - почему бы не использовать его в вашем источнике данных?

EDIT
[ Архивная копия тестового файла. ] с вашими данными

Все должно быть UTF-8 в первую очередь. Я загрузил файлы в notepad ++, преобразовал в utf-8 и вручную изменил символы, чтобы были нужны акценты. После того, как все сделано, все работает как шарм.

Кстати, если ваш сервер не определен для php-процесса .html-файлов, файлы, которые вы загружаете с помощью ajax, не получают ваш iso charset. Если вы настаиваете на использовании iso charset, запросите php-файл вместо html-файла и определите charset в заголовке (а не в самом файле)

19 голосов
/ 25 января 2010
$str=iconv("windows-1250","UTF-8",$str);

что помогло мне в итоге

10 голосов
/ 16 февраля 2009

Вам необходимо настроить свой сервер на использование ISO-8859-15 в качестве кодировки символов (добавив соответствующий заголовок HTTP). Делать это в теле html не поможет.

Я вижу эту строку

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>

в источнике вашего HTML. Этого не должно быть. Используя HTTP-заголовки Live, я не вижу соответствующий HTTP-заголовок charset. Используйте это как для своей первой страницы, так и для службы ajax.

7 голосов
/ 10 февраля 2011

Для моего PHP-приложения решение включало функцию utf8_decode для каждой переменной get в $_POST.

Пример: (СТОРОНА СЕРВЕРА)

if( strtoupper($_SERVER['REQUEST_METHOD']) == "POST" ){
$variable = htmlentities($_POST['variable']); // wrong
$variable = htmlentities( utf8_decode($_POST['variable']) ); // right
}

Abraços !!! (Пока, пока !!!)

7 голосов
/ 12 мая 2010

Я бы настоятельно рекомендовал использовать метод escape () javascript

вы можете использовать это с jQuery, получив значение формы следующим образом:

var encodedString = escape($("#myFormFieldID").val());
6 голосов
/ 16 февраля 2009

При распечатке переменных в файле ajax. Положить

htmlentities()

Вокруг них, посмотрите, работает ли это. Работал для меня в исландском приложении ajax.

4 голосов
/ 04 июня 2010

У меня были похожие проблемы, я работал в системе комментариев к контенту на нашем испанском портале. Что, наконец, решило мою проблему, после многих часов поиска, вместо того, чтобы связываться с jQuery charset, который, кажется, использует utf-8, несмотря ни на что, это было для декодирования из utf-8 обратно в ISO-8859-1 в PHP, который обрабатывал Аякс ПОСТ. В PHP есть встроенная функция utf8_decode(), поэтому первое, что я делаю со строкой комментариев, это:

$comentario = utf8_decode($_POST['comentario']);

(а затем я использовал nl2br() и htmlentities() функции PHP, чтобы подготовить текст для хранения с HTML-сущностями вместо специальных символов)

Удачи и мира всем! Seba

3 голосов
/ 23 июня 2010

Я возился с этой проблемой и обнаружил, что это решение работает для Firefox и Safari (да, я сейчас на Mac).

при получении запроса я сделал здесь тип контента = iso-8859-1:

if (window.XMLHttpRequest) { // Mozilla, Safari, ...
  httpRequest = new XMLHttpRequest();
        if (httpRequest.overrideMimeType) {
            httpRequest.overrideMimeType('text/xml; charset=ISO-8859-1');
        }
    }

Пожалуйста, скажите мне, если кто-то узнает, что это не работает, т. Е.

3 голосов
/ 26 февраля 2012

У меня была проблема с шведскими / норвежскими буквами, отображаемыми в виде вопросительных знаков, несмотря на то, что я указала:

contentType: "application/json; charset=utf-8",

Это было решено добавлением encodeURIComponent к строке.

url: "/set_comment.do?text=" + encodeURIComponent(comment),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...