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 ответа:
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'); ?>
необходимо настроить сервер на использование 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, я сделал, пожалуйста, прочитайте мой ответ здесь.
<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
byescape
(есть 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-файлов, для скриптов недостаточно просто изменить кодировку в скрипте - сам файл должен быть правильно закодирован.
У меня была такая же проблема со страницами, что:
- показать нормально при вызове
- есть специальные символы перепутались при вызове через 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, он все равно будет работать нормально.
Тарек