Подтвердить что ты не робот

Кодировка символов 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> для переноса на следующая строка?

Приветствия

4b9b3361

Ответ 1

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

ИЗМЕНИТЬ
[Архивная копия тестового файла с вашими данными

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

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

Ответ 2

Указание типа контента в 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'); ?>

Ответ 3

$str=iconv("windows-1250","UTF-8",$str);

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

Ответ 4

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

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

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

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

Ответ 5

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

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

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

Ответ 6

Для моего 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!!! (Bye Bye!!!)

Ответ 7

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

htmlentities()

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

Ответ 8

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

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

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

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

Ответ 9

Я занимаюсь этой проблемой и выяснил, что это решение работает для Firefox и сафари (да, 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');
        }
    }

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

Ответ 10

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

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

Response.Charset = "windows-1252"

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

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

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

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

Ответ 11

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

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

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

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

Ответ 12

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

 $.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);
        }
    });

Позвольте мне прочитать специальные символы, но только ПОСЛЕ того, что я явно сохранен FileName.txt в формате UTF-8. Стандартный формат для сохранения текстовых файлов в редакторе Windows: ANSI, а не UTF-8,, но его можно изменить, если вы "Сохранить как" и используете Dropbox рядом с Save-Button или использовать лучший редактор для начала.

Ответ 13

Я НЕ ДОЛЖЕН СОГЛАСИТЬ, что все должно быть UTF-8, вы можете отлично работать с ISO 8859, я сделал, пожалуйста, прочитайте мой ответ здесь.

fooobar.com/questions/98131/...

Ответ 14

<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> 

Это 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>                           
}

Ответ 15

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

  • Показать нормально, когда вызывается нормально
  • При вызове с помощью ajax-запроса специальные символы перепутаны

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

Ответ 16

Просто изменил {"type":"GET"} на {"type":"POST"} и работал как шарм с ISO-8859-1

Ответ 17

Если все приложение использует ISO-8859-1, вы можете изменить jquery.js, заменив все вхождения encodeURIComponent на escape (в текущем jquery script - 1.5 есть два замещения. 1)

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

Ответ 18

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

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

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

Ответ 19

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

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

Я сделал всего две вещи. В соединении с базой данных script я добавил:

mysql_set_charset('utf8',$connection);

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

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

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

Ответ 20

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

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

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

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

Ответ 21

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

Удачи!

Ответ 22

У меня была аналогичная проблема. У меня есть текстовый файл с данными 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": ""
        }
        ...
    ]
}

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

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

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

  • Найдите источник текста, который имеет правильное отображение французского текста
  • Скопировать текст
  • Goto Eclipse, откройте текстовый файл с данными
  • Щелкните правой кнопкой мыши файл в проводнике, откройте свойства и измените кодировку на ISO-8859-1
  • Исправьте текст так, чтобы он отображался правильно. Используйте copy/paste или клавиатуру.
  • Возможно, вам придется использовать клавиши со стрелками клавиатуры (влево/вправо), чтобы убедиться, что скрытых писем-невиновных нет, которые будут отображаться на HTML с забавной формой. Удалить такую ​​скрытую букву
  • Сохранить файл

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

Тарек