xmlHttpRequest将欧元符号显示为问号

时间:2011-11-10 18:21:18

标签: javascript ajax dynamic xmlhttprequest euro

我使用此脚本(来自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编码所以我的问题是:

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

2 个答案:

答案 0 :(得分:0)

好像你在某处有编码问题。

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

最佳做法是通过html页面中的html firendly代码替换异域字符以避免此类问题。使用€兑换€。

答案 1 :(得分:0)

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

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

  • 当您编写要插入目标HTML文档的目标HTML文档时,您将完全相同并获取Win-1252文档。但是,Web服务器不知道编码是什么。很多时候,它会默认为ISO-8859-1,而且ISO-8859-1甚至没有欧元符号!

  • JavaScript会读取0x80并撰写0x80

  • 浏览器在HTML文档中找到0x80,该文档应该是ISO-8859-1。在此类编码中,0x80实际上是空白的。

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