2011-09-05 125 views
2

我有一些特殊字符的位置:
http://209.141.56.244/test/char.php特殊字符显示为?标志着

但是当我通过AJAX抓住这个文件在这里,他们显示为回来吗?标记:
http://209.141.56.244/test/char.html

这些字符应该是“ISO-8859-1西方”,但切换浏览器的编码,以任何选项没有帮助。

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

+0

检查物品的代码转换像UTF-8 ISO,这看起来像一个双解码。 –

+0

我不会否认我的html非常混乱,不符合标准,当我有机会时我会解决这个问题。 @Jared将.html设置为utf-8没有帮助 – dukevin

+0

给utf-8一个机会 - 这并不复杂; ) –

回答

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响应仍然根据其各自的头文件进行解码。

+0

只是想知道,你怎么知道实际的字符集是什么? (我通常可以通过指定'UTF-8'来解决这些问题。) –

+0

用你的代码在PHP文件中设置头文件就是一个窍门!谢谢:) – dukevin

+2

@Jared把它称为一个有教养的猜测。 OP声明了ISO-8859-1(无论如何,这个设置在用户代理中都被Windows-1252覆盖)。将字符集设置为与实际数据不符的任何内容都不能解决任何问题,因此只需指定UTF-8就不会奇迹般地使其正常工作。 – Tomalak

3

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

在php中,您可以使用header函数为html版本强制编码,您应该使用apache配置文件(假设您使用apache,否则请参阅您的web服务器文档)。

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

这是永远标签网页文件明确很重要的。 HTTP 1.1表示默认字符集是ISO-8859-1。但在其他编码中也有许多未标记的文档,因此当没有明确的字符集参数 参数时,浏览器使用 阅读器的首选编码。

在同一页面

阿帕奇。这可以通过AddCharset(Apache 1.3.10和更高版本) 或AddType指令,目录或单个资源 (文件)完成。使用AddDefaultCharset(Apache 1.3.12和更高版本),可以设置整个服务器的默认字符集。欲了解更多 信息,请参阅Setting 'charset' information in .htaccess.