不显示 utf-8 特殊字符

新手上路,请多包涵

我将我的网站从本地测试服务器移动到 NameCheap 共享主机,现在我遇到了一个问题 - 一些页面没有正确显示 utf-8 特殊字符(而是显示问号)。所有页面都是 utf-8 编码的,所有数据库表也是如此。奇怪的是,有些页面显示正确,有些则显示不正确,看似随机的模式。

例如,我的索引页面很好,但我的个人资料页面不是。 faq.html 可以正常工作,但是当我将其重命名为 faq.php 时却不行。最奇怪的是,我有一个带有两个 JQuery 选项卡的页面,其中一个正确显示,另一个不正确!

有人可以帮我解决这个问题吗?

原文由 robert 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 639
2 个回答

这确实是一个令人讨厌的问题,但您可以尝试这些。

首先,确保文件实际保存为 UTF-8 格式。

然后检查您的 HTML 标头中是否有 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

您也可以尝试在 PHP 脚本的开头调用 header('Content-Type: text/html; charset=utf-8'); 或将 AddDefaultCharset UTF-8 添加到您的 .htaccess 文件中。

原文由 RCE 发布,翻译遵循 CC BY-SA 3.0 许可协议

听起来好像如果您请求 faq.html 网络服务器会向您的浏览器发出信号,表明该文件采用 UTF-8 编码。

检查您的浏览器宣布和使用了哪种编码,请参阅浏览器的文档如何执行此操作。每个浏览器都有这个,通常可以通过菜单访问(以指定您的偏好应该使用哪个网站的编码)并查看服务器返回的内容,您通常可以在页面属性中找到它。

然后听起来好像如果您请求 faq.php 网络服务器会通知您的浏览器该文件采用其他编码。根据默认的 PHP 配置设置,可能没有给出字符集/编码。由于它是一个 PHP 文件,您通常可以通过更改 PHP 配置 default_charset Docs 指令来解决此问题:

 default_charset = "UTF-8"

在主机上找到您的 php.ini 并相应地进行编辑。

如果您没有可用的 php.ini,您也可以使用 ini_set Docs 函数通过代码更改它:

 ini_set('default_charset', 'UTF-8');

请注意,您在脚本的早期就更改了它,因为 PHP 需要能够发送标头才能使其正常工作,并且如果标头已经发送,则无法再设置。

手动发送 Content-Type 标题行也有效:

 header('Content-Type: text/html; charset=UTF-8');

此外,您输出的所有 HTML 页面在其 HTML <head> 部分中也具有此标头是一个好习惯:

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

希望这会有所帮助。

原文由 hakre 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题