【发布时间】:2012-12-15 21:08:55
【问题描述】:
当XMLHttpRequest 中的文本包含希伯来字符时,我的这段代码似乎搞砸了,所以我做了一个小例子来演示这个问题。
小代码示例加载页面,然后将 div 的内容替换为从服务器获取的内容。 既然调用的是同一个网页,那么它应该用相同的内容替换它。
当 div 内的按钮包含英文字母时,代码可以正常工作,但如果字母超出 ASCII 127,则它会拧紧按钮。
我做了一些测试,发现如果我将文件保存为 Unicode,那么它可以正常工作... 问题是我无法将此文件保存为 Unicode,因为它:
- 文件大小加倍
- 将部分数据写入该 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 的东西)。
谢谢。
【问题讨论】:
-
为什么你不想使用 UTF-8?
-
你不能同时拥有它 - 希伯来字符总是在 ASCII 之外。您需要在这些字符合法的情况下使用某种编码(例如
iso-8859-8)。如果您的文件是 ASCII,则不能包含希伯来字符。 -
请解释一下“拧紧按钮”是什么意思?你遇到了什么错误?
-
@pomaxa - OP 在问题中解释。无论是文件大小,还是因为在文件中生成某些内容的过程只会产生 ASCII。
标签: javascript html ajax xmlhttprequest hebrew