JQuery load() и национальные буквы (например, ę,ą,ć)

Я использую метод load() JQuery для загрузки контента на страницу. Единственная проблема заключается в том, что при загрузке контента с помощью метода load() все национальные (польские) символы отображаются неверно... На обеих загруженных страницах и основной (на которой загружается контент) кодировка установлена ​​в iso-8859-2(да Я знаю, я должен использовать utf-8, но в этом случае это не поможет).

Я действительно не знаю, как решить это. Единственное решение, которое я решил, - это заменить специальные символы некоторым кодом перед загрузкой и после получения данных, декодирующих его, но это довольно сложно:D

Есть идеи?

ура

4 ответа

Решение

Хорошо, я провел небольшое исследование. И вот что я нашел:

JQuery .load() не смотрит в HTML meta тег для content-type, Вы можете выбрать один из двух вариантов:

  1. Чтобы установить заголовки ответа HTTP на Content-type: text/html; charset=iso-8859-2 а затем использовать JQuery .load(), Например, в PHP вы можете сделать это, поместив это в верхней части страницы:

    <?php header('Content-type: text/html; charset=iso-8859-2'); ?>

  2. Переопределить тип содержимого HTTP-ответа на стороне клиента с помощью jQuery. Для этого вы должны пройти настройку mimeType: "text/html; charset=iso-8859-2" в $.ajax(), Вы не можете сделать это с помощью .load() потому что он не поддерживает возможность установки параметров AJAX.

Оба варианта проверены, поэтому все должно работать!:)

Это все по-польски? Если нет, вы можете попробовать HTML-сущности для этих символов, браузер выполнит декодирование.

http://en.wikipedia.org/wiki/Polish_alphabet

Предполагая, что выбранный вами набор символов (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){/* делать вещи здесь */ });

Другие вопросы по тегам