带有希伯来字符的XMLHttpRequest

时间:2012-12-14 10:40:07

标签: javascript html ajax xmlhttprequest hebrew

XMLHttpRequest中的文字包含希伯来字符时,我的代码似乎搞砸了,所以我做了一个小例子来证明这个问题。

小代码示例加载页面,然后用从服务器获取的内容替换div的内容。 由于它调用相同的网页,因此它应该用相同的内容替换它。

当div中的按钮包含英文字母时,代码工作正常,但如果字母超出ASCII 127则会拧紧按钮。

我做了一些测试,看到如果我将文件保存为Unicode,那么它可以正常工作...... 问题是我无法将此文件保存为Unicode,因为它:

  1. 文件大小翻倍
  2. 在该html文件中写入一些数据的硬件,以ASCII格式写入
  3. 小例子只是加载自己:

    <HTML><HEAD><TITLE>Test</TITLE>
    </HEAD>
    <BODY onload="readPage()">
    <Div id='Hello'>
    <Button>שלום</Button>
    </Div>
    <Script>
    var xmlHttp;
    function readPage()
    {
        xmlHttp=GetXmlHttpObject();
    
        if (xmlHttp==null)
        {
            alert ("Your browser does not support AJAX!");
            return;
        }
    
        var url="/xampp/2.html?dummy=" + new Date().getTime();
        xmlHttp.onreadystatechange=stateChanged;
        xmlHttp.open("GET",url, true);
        xmlHttp.setRequestHeader("Content-Type", "text/plain;charset=ISO-8859-1");
        xmlHttp.setRequestHeader("Accept-Charset", "ISO-8859-1");
        xmlHttp.send(null);
    }
    
    function stateChanged()
    {
        if (xmlHttp.readyState==4)
        {
            var x = ""; 
            //alert(xmlHttp.responseXML);
            //alert(xmlHttp.responseText);
            if (xmlHttp.responseText.match(/<Div id='Hello'>([\s\S]*?)<\/Div>/i))
            {
                x = xmlHttp.responseText.match(/<Div id='Hello'>([\s\S]*?)<\/Div>/i)[1];
                //x = x.replace(/"/g,'');
    
    
                var pdata= document.all ? document.all["Hello"] :
                    document.getElementById("Hello");
    
                alert(pdata.innerHTML);
                alert(x);
                pdata.innerHTML=x;
                alert(pdata.innerHTML);
            }
    
        }
    }
    function GetXmlHttpObject()
    {
        var xmlHttp=null;
        try
        {
            // Firefox, Opera 8.0+, Safari
            xmlHttp=new XMLHttpRequest();
        }
        catch (e)
        {
            // Internet Explorer
            try
            {
                xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e)
            {
                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
        }
        return xmlHttp;
    }
    </Script>
    </BODY></HTML>
    

    我尝试更改字符集和内容类型,但它不起作用。

    我做错了什么?

    (顺便说一句,我不能使用任何jQuery个东西。)

    感谢。

2 个答案:

答案 0 :(得分:2)

您可以尝试手动编码字母。这是一个非常缓慢和糟糕的解决方案,但它可能会帮助你 q包含希伯来语数据 (在javascript上)

q=q.replace(/א/gi,"%E0");
q=q.replace(/ב/gi,"%E1");
q=q.replace(/ג/gi,"%E2");
q=q.replace(/ד/gi,"%E3");
q=q.replace(/ה/gi,"%E4");
q=q.replace(/ו/gi,"%E5");
q=q.replace(/ז/gi,"%E6");
q=q.replace(/ח/gi,"%E7");
q=q.replace(/ט/gi,"%E8");
q=q.replace(/י/gi,"%E9");
q=q.replace(/כ/gi,"%EB");
q=q.replace(/ך/gi,"%EA");
q=q.replace(/ל/gi,"%EC");
q=q.replace(/מ/gi,"%EE");
q=q.replace(/ם/gi,"%ED");
q=q.replace(/נ/gi,"%F0");
q=q.replace(/ן/gi,"%EF");
q=q.replace(/ס/gi,"%F1");
q=q.replace(/ע/gi,"%F2");
q=q.replace(/פ/gi,"%F4");
q=q.replace(/ף/gi,"%F3");
q=q.replace(/צ/gi,"%F6");
q=q.replace(/ץ/gi,"%F5");
q=q.replace(/ק/gi,"%F7");
q=q.replace(/ר/gi,"%F8");
q=q.replace(/ש/gi,"%F9");
q=q.replace(/ת/gi,"%FA");

答案 1 :(得分:1)

好的,我不确定XAMPP的Web服务器是针对我使用的特定HTML发送的,但是在特定硬件上,我们编写了Web服务器并发送:

HTTP/1.1 200 OK
MIME-version: 1.0
Content-Type: text/html
Content-length: 11280
Proxy-Connection: Keep-Alive
Connection: Keep-Alive
Age: 0

一种解决方案是将网页保存为Unicode,这对我们不利。 另一个似乎有效的选择是告诉浏览器我们想要一个特定的编码。 在这种情况下,Windows-1255。

我所要做的就是更改从网站发送的标题,这样它也将包含字符集,现在它可以正常工作:

HTTP/1.1 200 OK
MIME-version: 1.0
Content-Type: text/html; charset=Windows-1255
Content-length: 11280
Proxy-Connection: Keep-Alive
Connection: Keep-Alive
Age: 0