浏览器显示�而不是´

Posted

技术标签:

【中文标题】浏览器显示�而不是´【英文标题】:Browser displays � instead of ´ 【发布时间】:2011-05-04 22:46:44 【问题描述】:

我有一个 php 文件,其中包含以下文本:

<div class="small_italic">This is what you´ll use</div>

在一台服务器上,它显示为:

This is what you´ll use

在另一个方面,如:

This is what you�ll use

为什么会有区别,我可以做些什么来使它正确显示(作为撇号)?


所有注意事项(供将来参考)

我实现了 Gordon 的 / Gumbo 的建议,只是我在服务器级别而不是应用程序级别上实现了它。请注意,(a) 我必须重新启动 Apache 服务器,更重要的是,(b) 我必须用正确编码的更正数据替换现有的“坏数据”。

/etc/php.ini

default_charset = "iso-8859-1"

【问题讨论】:

对我来说似乎是一个编码问题。无论如何,你为什么不像其他人一样使用' 而不是´ 呢? :D 检查返回文档的字符集(标题)可能有解释,无论如何你可以使用&amp;#8217; 我会补充:这闻起来像 Word 复制/粘贴 它不是 ASCII 撇号 x'27'。它可能是仅在 MS 代码页中受支持的 Windows“左单引号”x'92'。 除了针对这个问题的具体建议之外,如果您还没有阅读 Joel Spolsky 的 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!),我始终建议您阅读:) 【参考方案1】:

您必须确保使用正确的字符集提供内容:

要么发送带有header 的内容,其中包括

<?php header("Content-Type: text/html; charset=[your charset]"); ?>

或 - 如果 HTTP charset 标头不存在 - 将 &lt;META&gt; element 插入 &lt;head&gt;

<meta http-equiv="Content-Type" content="text/html; charset=[your charset]" />

就像属性名称所暗示的那样,http-equiv 相当于 HTTP 响应标头,如果未设置相应的 HTTP 标头,用户代理应该使用它们。

就像 Hannes 在 cmets 中已经针对该问题提出的建议一样,您可以查看网络服务器返回的标头以了解它所服务的编码。两台服务器之间可能存在差异。因此,将上面的[your charset] 部分更改为“工作”服务器的部分。

有关原因的更详细解释,see Gumbo's answer。

【讨论】:

你怎么知道他的文档是UTF-8的? 更重要的是:数据似乎没有以 UTF-8 编码。 @Gordon:我更希望看到 proper order 中的建议:首先是 HTTP,然后是 HTML(并且只有在 HTTP 中没有指定编码的情况下)。 @Gumbo 好的,改变了顺序,虽然我很确定拥有 META 并没有什么坏处。它被称为 http-equiv 是有原因的。当没有等效的 http 标头时,用户代理应该使用它。 @Gordon:是的,如果在 HTTP 中指定了字符编码,则 META 根本不应该有任何影响。这就是为什么 META 在某些情况下不足的原因。【参考方案2】:

将浏览器的字符集设置为定义的值:

例如,

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

【讨论】:

【参考方案3】:

    在根目录下创建.htaccess文件:

    AddDefaultCharset utf-8
    AddCharset utf-8 *
    <IfModule mod_charset.c>
        CharsetSourceEnc utf-8
        CharsetDefault utf-8
    </IfModule>
    

    &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;

【讨论】:

【参考方案4】:

REPLACEMENT CHARACTER (U+FFFD) 的显示很可能意味着您的 specifying your output 是 Unicode,但您的数据不是。

在这种情况下,如果 ACUTE ACCENT ´ 例如使用 ISO 8859-1 编码,则它使用字节序列 0xB4 编码,因为这是 ISO 8859-1 中该字符的代码点.但是该字节序列在 UTF-8 等 Unicode 编码中是非法的。在这种情况下,会显示替换字符 U+FFFD。

因此,要解决此问题,请确保您是 specifying the character encoding properly,根据您的实际情况(反之亦然)。

【讨论】:

【参考方案5】:

这可能是由于您插入页面的数据与页面本身的字符编码不同(最常见的迭代是拉丁语 1 和另一个 UTF-8)。

检查用于页面和数据库的编码。可能会出现不匹配。

【讨论】:

【参考方案6】:

简单的解决方案是对特殊字符使用 ASCII 码。

撇号字符在 ASCII 中的值为&amp;#8217;。尝试将此值放入您的 HTML 中,它应该适合您。

【讨论】:

ASCII 只有一个撇号字符,位于 0x27。字符引用&amp;#8217; 指的是Unicode 中的字符U+2019 右单引号 @Gumbo:右单引号撇号的正确字符:languagegeek.com/typography/apostrophes.html 我认为他的意思是 &amp;#8217; 是一个纯 ascii 字符串,而不是它所代表的字符是 ascii。 @RoToRa:我想指出的是 US-ASCII 只有一个撇号字符,而字符引用指的是 Unicode 中的字符。除此之外,U+2019 并不是每种语言中正确的印刷撇号。但是,是的,它适用于英语。【参考方案7】:

总结一下:

    确保保存在 Web 服务器上的 FILE 具有正确的编码 确保 Web 服务器也使用正确的编码提供它 确保 HTML 元标记设置为正确的编码 确保使用“标准”特殊字符,即使用 ' 而不是 ´,因为您想编写类似“Luke Skywalker 的代码”之类的内容

对于编码,UTF-8 可能对你有好处。

如果此答案有帮助,请标记为正确或投票。谢了

【讨论】:

以上是关于浏览器显示�而不是´的主要内容,如果未能解决你的问题,请参考以下文章

.py 文件在浏览器中显示代码而不是运行

浏览器显示 Python 代码而不是执行它

HTML:为啥Android浏览器在键盘上显示“Go”而不是“Next”?

Tor 浏览器 GUI 显示代码而不是字符

从 mongodb 获取的数据显示在控制台而不是浏览器中 [重复]

浏览器在mac中显示纯文本而不是HTML