关于php:浏览器显示? 代替 ‘

Browser displays ? instead of ′

我有一个包含以下文本的PHP文件:

1
This is what you′ll use

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

1
This is what you′ll use

在另一个方面,如:

1
This is what you?ll use

为什么会有区别,我该怎么做才能使其正确显示(作为撇号)?

所有人注意(以备将来参考)

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

/etc/php.ini

default_charset =" iso-8859-1"


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

使用包含以下内容的标头发送内容

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

或-如果HTTP charset标头不存在-将元素插入

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

就像属性名称建议的那样,http-equiv等效于HTTP响应标头,如果未设置相应的HTTP标头,则用户代理应使用它们。

就像Hannes在问题注释中已经建议的那样,您可以查看Web服务器返回的标头,以查看其提供的编码。两台服务器之间可能存在差异。因此,将上面的[your charset]部分更改为"工作"服务器的部分。

有关原因的详细说明,请参见Gumbo的答案。


REPLACEMENT CHARACTER ?(U + FFFD)的显示很可能意味着您将输出指定为Unicode,但数据未指定。

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

因此,要解决此问题,请确保根据实际情况正确指定字符编码(反之亦然)。


总结一下:

  • 确保保存在Web服务器上的FILE具有正确的编码
  • 确保Web服务器还以正确的编码提供它
  • 确保将HTML元标记设置为正确的编码
  • 确保使用"标准"特殊字符,即使用"而不是"来编写类似" Luke Skywalker的代码"的代码
  • 对于编码,UTF-8可能对您有益。

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


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

    ASCII中的撇号字符的值为。尝试将此值放入您的HTML中,它应该可以正常工作。


    这可能是由于您要插入到页面中的数据导致的,而PHP使用的是与页面本身不同的字符编码(最常见的迭代是拉丁1和另一UTF-8)。

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


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

    例如,

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

  • 在根目录中创建一个.htaccess文件:

    1
    2
    3
    4
    5
    6
    AddDefaultCharset utf-8
    AddCharset utf-8 *
    <IfModule mod_charset.c>
        CharsetSourceEnc utf-8
        CharsetDefault utf-8
    </IfModule>