浏览器显示�而不是´
浏览器显示�而不是´
我有一个PHP文件,其中包含以下文本:
This is what you´ll use
在一个服务器上,它显示为:
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"
浏览器显示�而不是´的问题可能是由于内容的字符集不正确引起的。解决该问题的方法有两种:
1. 使用header函数发送正确的Content-Type头部信息:
2. 如果HTTP的charset头部信息不存在,则在head中插入一个META元素:
需要注意的是,http-equiv属性是HTTP响应头部的等效属性,当相应的HTTP头部未设置时,用户代理应该使用它们。
可以通过查看web服务器返回的头部信息来确定文档是否使用UTF-8编码。如果两个服务器之间存在差异,可以将上述代码中的[your charset]替换为"working"服务器中使用的字符集。
更详细的解释可以参考Gumbo在Stack Overflow上的回答。
另外需要注意的是,文档似乎不是以UTF-8编码的。建议按照正确的顺序设置字符编码,即先设置HTTP头部,然后再设置HTML头部(只有在HTTP中未指定编码时)。
如果HTTP中已经指定了字符编码,那么META标签就不会起作用。这也是为什么在某些情况下META标签是不够的原因。
请比较请求页面时Apache服务器返回的响应头部。可以使用Firebug(针对Firefox)或Fiddler(针对IE)来进行检查。
如果两个服务器返回的响应头部不同,其中一个使用UTF-8编码,并且出现了�字符,那么很可能是之前提到的情况。一个服务器发送了编码信息,而另一个没有。发送UTF-8编码的服务器会覆盖通过META设置的ISO-8859-1编码,因为META只是一个备选方案。尝试使用PHP如上所示的方法覆盖头部信息。
在php.ini中切换到iso-8859-1并重新启动apache可能会使一些字符正确显示,但其他字符可能仍然显示为QuiÃnes somos, Explóra。请按照上述建议发送头部信息,并检查错误字符是否实际上属于ISO-8859-1。如果不是,那么它们必须被编码为相应的HTML实体。