JQuery load() и национальные буквы (например, ę,ą,ć)
Я использую метод load() JQuery для загрузки контента на страницу. Единственная проблема заключается в том, что при загрузке контента с помощью метода load() все национальные (польские) символы отображаются неверно... На обеих загруженных страницах и основной (на которой загружается контент) кодировка установлена в iso-8859-2(да Я знаю, я должен использовать utf-8, но в этом случае это не поможет).
Я действительно не знаю, как решить это. Единственное решение, которое я решил, - это заменить специальные символы некоторым кодом перед загрузкой и после получения данных, декодирующих его, но это довольно сложно:D
Есть идеи?
ура
4 ответа
Хорошо, я провел небольшое исследование. И вот что я нашел:
JQuery .load()
не смотрит в HTML meta
тег для content-type
, Вы можете выбрать один из двух вариантов:
Чтобы установить заголовки ответа HTTP на
Content-type: text/html; charset=iso-8859-2
а затем использовать JQuery.load()
, Например, в PHP вы можете сделать это, поместив это в верхней части страницы:<?php header('Content-type: text/html; charset=iso-8859-2'); ?>
Переопределить тип содержимого HTTP-ответа на стороне клиента с помощью jQuery. Для этого вы должны пройти настройку
mimeType: "text/html; charset=iso-8859-2"
в$.ajax()
, Вы не можете сделать это с помощью.load()
потому что он не поддерживает возможность установки параметров AJAX.
Оба варианта проверены, поэтому все должно работать!:)
Это все по-польски? Если нет, вы можете попробовать HTML-сущности для этих символов, браузер выполнит декодирование.
Предполагая, что выбранный вами набор символов (ISO-8859-2) может фактически представлять символы, которые вы хотите использовать, похоже, что существует проблема с файлом, который не подается с сервера с правильным набором символов ('charset').
Если вы используете load()
чтобы запросить файл HTML, параметр charset для файлов HTML может быть установлен Content-Type
заголовок в ответе, или включен как meta
тег в содержании HTML.
Как именно вы устанавливаете заголовок Content-Type, зависит от того, как вы генерируете или обслуживаете HTML. W3C имеет хороший документ, который описывает, как это сделать на нескольких веб-серверах и языках программирования:
http://www.w3.org/International/O-HTTP-charset
Установка метатега charset может оказаться проще. Точный синтаксис отличается в разных версиях HTML, и вы можете найти некоторую информацию здесь:
http://en.wikipedia.org/wiki/Character_encodings_in_HTML
Как предложили несколько комментаторов, если вы хотите максимизировать поддержку различных языков на своем веб-сайте, также стоит подумать о переходе к кодировке Unicode, такой как UTF-8, которая сводит к минимуму вероятность возникновения таких несовместимостей.
У меня была та же проблема, и я решил ее, прочитав несколько потоков. Я создал новую функцию / плагин и добавил в него mimetype и contentType, и он вернул правильную кодировку.
(function($){
$.fn.formatload = function( url, params, callback ) {
if ( typeof url !== "string" ) {
return _load.call( this, url );
// Don't do a request if no elements are being requested
} else if ( !this.length ) {
return this;
}
var off = url.indexOf(" ");
if ( off >= 0 ) {
var selector = url.slice(off, url.length);
url = url.slice(0, off);
}
// Default to a GET request
var type = "GET";
// If the second parameter was provided
if ( params ) {
// If it's a function
if ( jQuery.isFunction( params ) ) {
// We assume that it's the callback
callback = params;
params = null;
// Otherwise, build a param string
} else if ( typeof params === "object" ) {
params = jQuery.param( params, jQuery.ajaxSettings.traditional );
type = "POST";
}
}
var self = this;
// Request the remote document
jQuery.ajax({
url: url,
type: type,
mimeType: "text/html; charset=iso-8859-2",
dataType: "html",
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
data: params,
complete: function( res, status ) {
// If successful, inject the HTML into all the matched elements
if ( status === "success" || status === "notmodified" ) {
// See if a selector was specified
self.html( selector ?
// Create a dummy div to hold the results
jQuery("<div />")
// inject the contents of the document in, removing the scripts
// to avoid any 'Permission Denied' errors in IE
.append(res.responseText.replace(rscript, ""))
// Locate the specified elements
.find(selector) :
// If not, just inject the full result
res.responseText );
}
if ( callback ) {
self.each( callback, [res.responseText, status, res] );
}
}
});
return this;
}
})(jQuery);
Это называется нормальной нагрузкой jQuery. например
$('#div').formatload(url, data, function(data){/* делать вещи здесь */ });