特殊字符显示为?分数

时间:2011-09-05 22:06:57

标签: php html ajax unicode encoding

我这里有一些特殊字符:
http://209.141.56.244/test/char.php

但是当我在这里通过ajax获取此文件时,它们会显示为返回?标记:
http://209.141.56.244/test/char.html

这些字符应为“ISO-8859-1 Western”,但将浏览器编码切换为任何选项都无济于事。

为什么会这样,我该如何解决?

2 个答案:

答案 0 :(得分:5)

您的服务器将Ajax响应发送为text/html,这使得浏览器采用UTF-8(这是默认值),但您的数据本身不是UTF-8。

将Ajax响应发送为text/html; Charset=Windows-1252(您实际上并未使用ISO-8859-1),它应该可以正常工作。

header('Content-Type: text/html; Charset=Windows-1252');

PS:将浏览器切换到另一个字符集无济于事,因为这只会影响页面本身。后续的Ajax响应仍然会根据各自的头进行解码。

答案 1 :(得分:3)

您的网页将text/html作为Content-Type返回,因此浏览器(和ajax脚本)会使用当前上下文给出的默认编码对其进行解释。

在php中你可以使用header函数对html版本强制编码你应该使用apache配置文件(假设你使用的是apache,否则请看你的webserver doc)。

http://www.w3.org/International/O-HTTP-charset

  

始终明确标记Web文档非常重要。 HTTP   1.1表示默认字符集是ISO-8859-1。但也有   其他编码中的许多未标记文档,因此浏览器使用   当没有明确的字符集时,读者的首选编码   参数。

来自同一页

  

<强>的Apache 即可。这可以通过AddCharset(Apache 1.3.10及更高版本)完成   或AddType指令,用于目录或个人资源   (文件)。使用AddDefaultCharset(Apache 1.3.12及更高版本),它是   可以为整个服务器设置默认字符集。更多   信息,请参阅Setting 'charset' information in .htaccess.

上的文章