jQuery AJAX кодировка символов


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

вот 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 56

22 ответа:

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

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

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

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

указание типа контента на 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'); ?>
$str=iconv("windows-1250","UTF-8",$str);

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

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

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

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

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

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

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

var encodedString = escape($("#myFormFieldID").val());

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

Ex: (на стороне сервера)

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

Abraços!!! (Прощай!!!)

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

htmlentities()

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

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

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

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

удачи и мира во всем! Себа

я возился с этой проблемой и выяснил, что это решение работает для Firefox и safari (да, im на mac в данный момент).

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

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

скажите, пожалуйста, если кто-то узнает, что это не работает в IE.

у меня была аналогичная проблема с ASP с моими страницами. Я решил так:

1) вставляется в начале ASP файла, вызываемого методом jQuery ajax инструкция:

Response.Charset = "windows-1252"

на моей странице asp до того, как кодировка не была определена, и я сохранил свой файл с кодировкой ANSI (с текстовым редактором как notepad++)

2) в html-файл, который вызывает ASP-файл с помощью метода jQuery ajax, я вставил параметр content-type, который вы видите ниже:

$.ajax({         
data: parameters,         
type: "POST",         
url: ajax_url,
datatype: 'html',         
contentType: "text/html;charset=windows-1252",

вкратце, это важно определить в вашем ASP файле под названием charset. Как ни странно, я вижу, что мой jquery работает с windows-1252, но не работает с кодировкой ISO-8859-1: в этом случае метод jQuery ajax дает исключение.

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

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

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

url: "/set_comment.do?text=" + encodeURIComponent(comment),

Я пробовал много предложений для чтения в текстовом файле с немецкими специальными символами (ä,ö,ü). В конце концов:

 $.ajax({
        async:false,
        type: "GET",
        url: "data/FileName.txt",
        dataType: "text",
        contentType: "application/x-www-form-urlencoded;charset=UTF-8",
        success: function (data) {
           alert(data);
        }
    });

позвольте мне прочитать в специальных символах, но только после того, как я явно сохраненное имя файла.txt в формате UTF-8. Стандартный формат для сохранения текстовых файлов в Редакторе Windows-это ANSI, а не UTF-8, но он может быть изменен, если вы" Сохранить как " и использовать dropbox рядом с кнопкой сохранения или использовать лучший редактор для начала.

Я не согласен, что все должно быть UTF-8, вы можете заставить его работать отлично с ISO 8859, я сделал, пожалуйста, прочитайте мой ответ здесь.

мой ответ в stackoverflow

<script type="text/javascript">
  function GetContent(idUser){ 
    $.ajaxSetup({
      url: 'ping.php'
    });

    $.ajax({
      type: "POST",
      url: "blablabla.php",
      dataType: "text",
      data: ({ParamUserID:idUser}),// here we def wich variabe is assiciated
      contentType: "application/x-www-form-urlencoded; charset=iso-8859-1",
      success: function(html) {
        $('#user_specified_content').html(html);
      }
    });     
  }
</script> 

это скрипт, из которого я получаю свой контент от blabla.PHP-страница.

когда я получаю свои данные об успехе, мои акценты не появляются.

Я нашел супер хорошее рабочее решение самостоятельно для извлечения данных с акцентами на извлеченных данных из .success функции

на моей странице blabla. Я сделал это, чтобы принести решение моей проблемы:

Я использую utf8_encode(place your data here) в моем php файле. Увидеть его в действии ниже:

while( $row = sqlsrv_fetch_array($recordset) )
{                           
    <option value="<?php echo $row["xyz"]; ?>"><?php echo utf8_encode($row["gName"]) . ' | ' . utf8_encode($row["gManagerName"]); ?></option>                           
}

Если все приложение использует ISO-8859-1, Вы можете изменить свой jquery.JS замена всех вхождений encodeURIComponent by escape (есть 2 вхождения для замены в текущем скрипте jquery-1.5.1)

посмотреть encodeUIComponent и побег для получения дополнительной информации

я столкнулся с той же проблемой и пробовал несколько способов. И я нашел решение. Если вы установите заголовок запроса для "принять", как показано ниже;

$.ajax({
        data: parameters,
        type: "POST",
        url: ajax_url,
        dataType: 'json',
        beforeSend : function(xhr) {
            xhr.setRequestHeader('Accept', "text/html; charset=utf-8");
        },
        success: callback
});

вы увидите, что все символы кажутся правильными

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

Итак, теперь я добавляю к уже длинному списку ответов свое собственное решение, которое решило мой вид кодировки проблема.

Я сделал только две вещи. В скрипте подключения к базе данных я добавил:

mysql_set_charset('utf8',$connection);

и кроме этого:

  • я изменил кодировку всех файлов на UTF-8

дело в том, что все должно быть в той же кодировке. А при создании новых php-файлов, для скриптов недостаточно просто изменить кодировку в скрипте - сам файл должен быть правильно закодирован.

только что изменил {"type":"GET"} до {"type":"POST"} и с ISO-8859-1

У меня была такая же проблема со страницами, что:

  • показать нормально при вызове
  • есть специальные символы перепутались при вызове через ajax-запрос

чтобы решить проблему (с помощью php), я использовал utf8_encode() или htmlentities() на исходные данные. Оба работали, я использовал их в разных проектах.

Если вы используете CodeIgniter, вы можете решить эту проблему, добавив следующий код на свой контроллер перед загрузкой любых представлений (при условии, что у вас есть charsetправильно установить в вашей конфигурации. Если нет, просто поставьте charset=whateveryouwant.

$this->output->set_header('Content-type: text/html; charset='.$this->config->item('charset'));

Я сделал это, чтобы добавить эту строку в конструктор MY_Controller, мой суперкласс для всех контроллеров, таким образом, я уверен, что у меня не будет проблем с кодированием нигде.

кстати, это не влияет на возврат JSON (которые закодированы в UTF-8).

Я попытался прочитать локальный json / текстовый файл с помощью $.ajax и кодировка сначала не работали.. Я получил его работу, сохранив файл json в кодировке UTF-8. Это можно сделать просто с помощью блокнота windows.. используйте "сохранить как", а затем под именем файла вы можете установить кодировку UTF-8.

удачи!

у меня была аналогичная проблема. У меня есть текстовый файл с данными json, который имеет французский текст. Всегда была проблема отображения некоторых символов. В моем случае программа JavaScript использует Ajax для извлечения текстового файла json следующим образом:

$.ajax({
    async: false,
    type: 'GET',
    url: 'some-url',
    success: function(data, status) {
        mainController.constructionStageMaster = data.records;
     }
});

возвращенные данные всегда имели неправильные акцентированные французские буквы.

текст json выглядит следующим образом:

{
    "records": [
        {
            "StageDesc": "Excavation, Fondation et Bases",
            "Allowed": 9,
            "Completed": 0,
            "TotalCompleted": ""
        },
        {
            "StageDesc": "Étanchement et Remblayage",
            "Allowed": 3,
            "Completed": 0,
            "TotalCompleted": ""
        },
        {
            "StageDesc": "Encadrement et revêtement mural intermédiaire",
            "StageDesc_fr": "Encadrement et revêtement mural intermédiaire np++",
            "StageDesc_fr2": "Encadrement et revêtement mural intermédiaire",
            "Allowed": 15,
            "Completed": 0,
            "TotalCompleted": ""
        }
        ...
    ]
}

Примечание В приведенном выше примере данных, 3-й элемент, я разместил текст с правильным é и ошибочные ê французские буквы с диакритическими знаками.

к вашему сведению, казалось, что существует некоторая глобальная конфигурация проекта Eclipse с использованием ISO-8859-1 кодировка. В вашем случае это может быть другая кодировка.

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

  • найти источник текста, который имеет правильное отображение французского текста
  • скопировать текст
  • Goto Eclipse, откройте текстовый файл с данными
  • Правой Кнопкой Мыши по файлу в проводнике, откройте "свойства" и измените кодировку на ISO-8859-1
  • исправьте текст, чтобы он отображался правильно. Используйте копирование / вставку или клавиатуру
  • возможно, вам придется использовать клавиши со стрелками клавиатуры (влево/вправо), чтобы убедиться, что нет скрытых букв виновника, которые будут отображаться на HTML с забавной формой. Удалить такие скрытые письмо
  • сохраните файл

теперь, в моем случае, я не указал никаких параметров кодирования в вызове Ajax, и он отлично работает. Кроме того, если я изменю кодировку текстового файла с данными json, он все равно будет работать нормально.

Тарек