浏览器显示 而不是'

时间:2010-11-04 08:54:30

标签: php html browser character-encoding special-characters

我有一个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”

7 个答案:

答案 0 :(得分:16)

您必须确保内容以适当的字符集提供:

使用包含

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

或 - 如果HTTP字符集标题不存在 - 将<META> element插入<head>

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

与属性名称一样,http-equiv相当于http响应标头,如果未设置相应的http标头,则用户代理应使用它们。

EDIT1:与问题评论中已经建议的Hannes一样,您可以查看网络服务器返回的标头,以查看它所服务的编码。两台服务器之间可能存在差异。因此,将上面的[your charset]部分更改为“工作”服务器的部分。

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

答案 1 :(得分:8)

显示 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(反之亦然)。

答案 2 :(得分:1)

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

ASCII中apostrophe个字符的值为&#8217;。尝试将此值放在您的html中,它应该适合您。

希望这有帮助!

答案 3 :(得分:1)

总结一点:

  1. 确保Web服务器上保存的文件具有正确的编码
  2. 确保网络服务器还使用正确的编码方式提供
  3. 确保HTML元标记设置为正确的编码
  4. 确保使用“标准”特殊字符,即使用'而不是'想要写出类似“Luke Skywalker的代码”
  5. 对于编码,UTF-8可能对你有好处。

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

答案 4 :(得分:0)

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

E.g。

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

答案 5 :(得分:0)

1)在根目录中创建.htaccess文件:

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

2)<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

答案 6 :(得分:0)

这可能是由于您插入到页面中的数据引起的,其中PHP与页面本身的字符编码不同(最常见的迭代是一个是Latin 1而另一个是UTF 8)。检查用于页面和数据库的编码。有可能会出现不匹配的情况。