我有以下问题:
我使用基本的xmlhttp请求加载了一个页面,如下所示:xmlhttp = getXMLHTTP();
xmlhttp.open("POST",link,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("principal").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.send();
其中link是我想要动态调用的文件的源,principal是我想要加载它的div。这似乎不是我的问题的主要错误(我将在下面解释),因为我已经用许多页面进行了测试。
我的问题现在仍然是这样一个事实,我想有一个"弹出"框,这是在页面加载xmlhttp,将显示我的网页的条款和条件,和头 html标签没有被解析,因为字符集UTF-8不受尊重:重音和特殊字符出现与?符号,而不是右边的。
我用下面的PHP代码加载这个弹出窗口:<?php include_once('../../info/terms_and_conds.html'); ?>
这个文件里面的HTML代码是:
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>Terms and Conditions</title>
</head>
<body>
This is a test á é í ó ú ñ ç
</body>
</html>
最后,输出如下:
This is a test � � � � � � �
注:我本想贴一张它的照片,但是我没有足够的声望。给您带来的不便,敬请谅解
我还必须保证所有的重音和特殊字符都正确地显示在使用xmlhttp Request加载的页面中。它可能是include_once()函数产生这个问题吗?
这里的问题是您的文件没有保存为/编码为UTF-8。
如注释所述,使用代码编辑器(建议使用notepad++)打开文件并检查其编码。
如果不是UTF-8,将其转换为UTF-8,然后保存文件。
参考:- https://notepad-plus-plus.org/- notepad++ (for Windows)
尽管还有其他代码编辑器可以执行相同的操作
脚注:
如果您以后有任何问题,并且已经发送了标题…警告,那么您将需要编码为没有BOM的UTF-8。
一个BOM(又名字节顺序标记)算作输出(在报头之前)。
这是关于这个主题的更多内容:
- https://en.wikipedia.org/wiki/Byte_order_mark
可能您的web服务器正在发送不同的字符集头比您指定的<meta/>
标签。尝试在PHP文件中显式指定内容类型头。
<?php
header('Content-Type: text/html; charset=UTF-8');
include_once('../../info/terms_and_conds.html');
?>
这实际上只是由于编码-如果你把包含"UTF-8"的元标签改成如下:
<meta http-equiv="Content-type" content="text/html; charset= ISO-8859-1" />