JQuery load () и национальные буквы (например, ę, ą, ć) - PullRequest
6 голосов
/ 02 июля 2011

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

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

Есть идеи?

Приветствия

Ответы [ 4 ]

5 голосов
/ 02 июля 2011

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

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.

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

1 голос
/ 02 июля 2011

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

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

1 голос
/ 02 июля 2011

Предполагая, что выбранный вами набор символов (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#Specifying_the_document.27s_character_encoding

Как предложили несколько комментаторов, если вы хотите максимально увеличить поддержку различных языков на своем веб-сайтеКроме того, неплохо бы рассмотреть возможность перехода к кодировке Unicode, например UTF-8, что сводит к минимуму вероятность возникновения таких несовместимостей.

0 голосов
/ 29 мая 2013

У меня была та же проблема, и я решил ее, прочитав несколько тем. Я создал новую функцию / плагин и добавил в него 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. * например 1004 *

$ ('# div'). Formatload (url, data, function (data) {/ * делать вещи здесь * /});

...