【问题标题】:Special characters display as ? marks特殊字符显示为 ?分数
【发布时间】:2011-11-10 21:42:25
【问题描述】:

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

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

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

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

【问题讨论】:

  • 检查类似 utf-8 到 ISO 的代码翻译,这看起来像是双重解码。
  • 我不会否认我的 html 非常混乱且不符合标准,我会在有机会时修复它。 @Jared 将 .html 设置为 utf-8 没有帮助
  • 给 utf-8 一个机会——没那么复杂; )

标签: php html ajax unicode encoding


【解决方案1】:

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

【讨论】:

  • 只是想知道,你怎么知道实际的字符集是什么? (我通常可以通过指定UTF-8 来解决这些问题。)
  • 用你的代码在 php 文件中设置标题就可以了!谢谢:)
  • @Jared 称之为有根据的猜测。 OP 声明了 ISO-8859-1(无论如何在用户代理中被 Windows-1252 覆盖的设置)。将字符集设置为与实际数据不对应的任何内容都不能解决任何问题,因此简单地指定 UTF-8 不会神奇地使其正常。
【解决方案2】:

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

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

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

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

来自同一页面

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 2013-11-21
    • 2012-05-21
    相关资源
    最近更新 更多