0

のテキストにヘブライ文字が含まれていると、このコードが台無しになるように見えるXMLHttpRequestので、問題を示すために小さな例を作成しました。

小さなコード例では、ページをロードしてから、div のコンテンツをサーバーから取得したコンテンツに置き換えます。同じ Web ページを呼び出すため、同じコンテンツに置き換える必要があります。

div 内のボタンに英語の文字が含まれている場合、コードは正常に機能しますが、文字が ASCII 127 を超えている場合、ボタンがねじ込まれます。

いくつかのテストを行ったところ、ファイルを Unicode として保存すると問題なく動作することがわかりました...問題は、このファイルを Unicode として保存できないことです。

  1. ファイルのサイズが 2 倍になります
  2. そのhtmlファイルにデータの一部を書き込むハードウェアは、ASCIIで書き込みます

小さな例は、それ自体をロードするだけです:

<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ん)。

ありがとう。

4

2 に答える 2

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");
于 2012-12-14T10:53:10.240 に答える
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

解決策の 1 つは、Web ページを Unicode として保存することですが、これは私たちにとっては良くありません。機能しているように見えるもう 1 つのオプションは、特定のエンコーディングが必要であることをブラウザに伝えることです。この場合、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
于 2012-12-15T13:08:55.467 に答える