Кодировка символов 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>
для переноса на следующая строка?
Приветствия
Ответы
Ответ 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, он все равно будет работать нормально.
Тарек