特殊字符显示为?马克


Special characters display as ? marks

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

但是当我通过ajax抓取这个文件时,它们显示为back ?标记:
http://209.141.56.244/test/char.html

这些字符应该是"ISO-8859-1 Western",但将我的浏览器编码切换到任何选项都没有帮助。

为什么会这样,我该如何修复它?

您的服务器将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响应仍然根据它们各自的报头进行解码。

您的页面将text/html返回为Content-Type,因此浏览器(和ajax脚本)使用当前上下文给出的默认编码来解释它们。

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

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

始终明确地标记Web文档是非常重要的。HTTP1.1说默认的字符集是ISO-8859-1。但也有许多未标记的文档采用其他编码,因此浏览器使用当没有显式字符集时,阅读器的首选编码参数。

从同一页

Apache

。这可以通过AddCharset完成(Apache 1.3.10和更高版本)或AddType指令,用于目录或单个资源(文件)。使用AddDefaultCharset (Apache 1.3.12及更高版本),它是可以为整个服务器设置默认字符集。更多的信息,参见设置"字符集"信息的文章. htaccess .