浏览器显示?代替

sil*_*npi 9 html php browser character-encoding special-characters

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

<div class="small_italic">This is what you´ll use</div>
Run Code Online (Sandbox Code Playgroud)

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

This is what you´ll use
Run Code Online (Sandbox Code Playgroud)

另一方面,如:

This is what you?ll use
Run Code Online (Sandbox Code Playgroud)

为什么会有差异,我该怎么做才能使它显得正确(作为撇号)?


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

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

/etc/php.ini中

default_charset ="iso-8859-1"

Gor*_*don 16

你必须确保,内容是用适当的字符集提供的:

任一发送与所述内容首部包含

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

或者- 如果不存在HTTP字符集头 -插入charset元素进入<META>

<meta http-equiv="Content-Type" content="text/html; charset=[your charset]" />
Run Code Online (Sandbox Code Playgroud)

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

EDIT1:就像Hannes在问题的评论中已经建议的那样,您可以查看您的网络服务器返回的标题,以查看它所服务的编码.两台服务器之间可能存在差异.因此,将<head>上面的部分更改为"工作"服务器的部分.

EDIT2有关原因的详细说明,请参阅Gumbo的回答.

  • 更重要的是:数据似乎不是用UTF-8编码的. (2认同)

Gum*_*mbo 8

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

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

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