0

我使用这个脚本(来自dynamicdrive)用id动态填充div:

    var bustcachevar=1 //bust potential caching of external pages after initial request? (1=yes, 0=no)
    var loadedobjects=""
    var rootdomain="http://"+window.location.hostname
    var bustcacheparameter=""

    function ajaxpage(url, containerid){
        var page_request = false
        if (window.XMLHttpRequest) // if Mozilla, Safari etc
        page_request = new XMLHttpRequest();
        else if (window.ActiveXObject){ // if IE
            try {
                page_request = new ActiveXObject("Msxml2.XMLHTTP");
                }
            catch (e){
                try{
                    page_request = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                catch (e){}
            }
        }
        else
        return false
        page_request.onreadystatechange=function(){
            loadpage(page_request, containerid)
        }

        if (bustcachevar) //if bust caching of external page
        bustcacheparameter=(url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
        page_request.open('GET', url+bustcacheparameter, true)
        page_request.send(null)
    }

    function loadpage(page_request, containerid){
        if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
        document.getElementById(containerid).innerHTML=page_request.responseText
    }

一切正常,直到我加载一个带有例如欧元符号的页面。代码页在页面上设置正确,但显示一个问号。我不知道足够的 javascript 来解决这个问题。

提前感谢您的任何建议!

注意:感谢朋友,我现在知道使用 UTF-8 中的此脚本保存要加载的文件可以解决问题。但我不能确定我加载的每个页面都是 UTF-8 编码的,所以我的问题是:

脚本有没有办法设置正确的字符集?有没有办法让脚本适应您要加载的文件的代码页?

4

2 回答 2

0

似乎您在某处遇到了编码问题。

我强烈建议您在任何地方都使用 UTF-8,因为它是 Web 的既定标准。检查执行 ajax 调用的页面和动态加载的页面是否以 UTF-8 编码并由服务器以正确的标头发送(标头应包含类似的内容Content-type: text/html; charset=UTF-8)。

此外,最好的做法是用 html 页面中的 html 友好代码替换外来字符以避免此类问题。用于€€。

于 2011-11-10T18:40:00.060 回答
0

这是我的假设(我认为您的更新已经证实了这一点):

  • 当您编写正在加载的远程文档时,您只需打开编辑器,点击键盘上的 € 符号并保存。由于您从未选择任何编码,因此您的编辑器使用了 ANSI 代码页。这就是问题所在:ANSI 代码页基本上取决于您的居住地。在西欧,Win-1252是一种流行的选择,它将欧元符号编码为0x80.

  • 当您编写要插入的目标 HTML 文档时,您执行完全相同的操作并获得 Win-1252 文档。但是,网络服务器不知道编码是什么。很多时候,它会默认为 ISO-8859-1 之类的东西而 ISO-8859-1 甚至没有欧元符号!

  • JavaScript 读取0x80和写入0x80.

  • 浏览器0x80在一个假定为 ISO-8859-1 的 HTML 文档中找到。在这种编码中,0x80实际是空白的。

所以你不必修复你的 JavaScript 代码(那里没有什么可修复的,主要是因为那里没有任何问题)。您需要找出您网站的编码是什么,并生成实际使用这种编码的文件(高级编辑器会让您选择)。

于 2011-11-10T19:38:24.217 回答