浏览器显示�而不是´
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
检查返回文档的字符集(标题)可能有解释,无论如何你可以使用&#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
标头不存在 - 将 <META>
element 插入 <head>
:
<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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
【讨论】:
【参考方案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 中的值为&#8217;
。尝试将此值放入您的 HTML 中,它应该适合您。
【讨论】:
ASCII 只有一个撇号字符,位于 0x27。字符引用&#8217;
指的是Unicode 中的字符U+2019 右单引号。
@Gumbo:右单引号是撇号的正确字符:languagegeek.com/typography/apostrophes.html
我认为他的意思是 &#8217;
是一个纯 ascii 字符串,而不是它所代表的字符是 ascii。
@RoToRa:我想指出的是 US-ASCII 只有一个撇号字符,而字符引用指的是 Unicode 中的字符。除此之外,U+2019 并不是每种语言中正确的印刷撇号。但是,是的,它适用于英语。【参考方案7】:
总结一下:
-
确保保存在 Web 服务器上的 FILE 具有正确的编码
确保 Web 服务器也使用正确的编码提供它
确保 HTML 元标记设置为正确的编码
确保使用“标准”特殊字符,即使用 ' 而不是 ´,因为您想编写类似“Luke Skywalker 的代码”之类的内容
对于编码,UTF-8 可能对你有好处。
如果此答案有帮助,请标记为正确或投票。谢了
【讨论】:
以上是关于浏览器显示�而不是´的主要内容,如果未能解决你的问题,请参考以下文章
HTML:为啥Android浏览器在键盘上显示“Go”而不是“Next”?