JQuery load()和全国字母(如ę,±,ć)

时间:2011-07-02 09:39:59

标签: jquery load chars polish

我正在使用JQuery load()方法将内容加载到页面。唯一的问题是,当通过load()方法加载内容时,所有国家(波兰)字符都显示无效...在加载的页面和主要内容(其中内容加载)编码设置为iso-8859-2(是的) ,我知道,我应该使用utf-8 bo在这种情况下无效。)

我真的不知道如何解决它。我唯一的解决方案是在加载之前和接收数据解码后用一些代码替换特殊字符,但它有点复杂:D

有什么想法吗?

干杯

4 个答案:

答案 0 :(得分:5)

好的,我做了一些研究。这就是我发现的:

jQuery .load()没有查看meta的HTML 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. 使用jQuery覆盖客户端的HTTP响应内容类型。为此,您应将设置mimeType: "text/html; charset=iso-8859-2"传递给$.ajax()。您无法使用.load()执行此操作,因为它不支持设置Ajax设置。

  3. 两个选项都经过测试,所以一切都应该有效! :)

答案 1 :(得分:1)

假设您选择的字符集(ISO-8859-2)实际上可以代表您想要使用的字符,那么这听起来像是没有从服务器提供正确字符集的文件(&& #39;字符集&#39;。)

如果您使用load()来请求HTML文件,则HTML文件的charset参数可以由响应中的Content-Type标头设置,也可以包含在meta标记中在HTML内容中。

您设置Content-Type标头的具体方式取决于您如何生成或提供HTML。 W3C有一个很好的文档,描述了如何在多个Web服务器和编程语言中完成它:

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

正如一些评论者建议的那样,如果您希望最大限度地支持您网站中的不同语言,那么考虑采用UTF-8等Unicode编码也是一个好主意,这可以最大限度地减少这些不兼容性发生的可能性。

答案 2 :(得分:1)

这一切都是擦亮的吗?如果没有,您可以为这些字符尝试HTML实体,浏览器将进行解码。

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

答案 3 :(得分:0)

我遇到了同样的问题,我通过阅读多个线程来解决它。 我所做的是创建一个新的函数/插件,并在其中添加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加载。 e.g

$('#div')。formatload(url,data,function(data){/ * do stuff here * /});