为啥我的页面不能显示é,而是显示�?

Posted

技术标签:

【中文标题】为啥我的页面不能显示é,而是显示�?【英文标题】:Why my page cannot display é, instead, showing �?为什么我的页面不能显示é,而是显示�? 【发布时间】:2011-09-22 14:12:29 【问题描述】:

我已在 html 中将页面编码设置为 UTF-8:

meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8"

在 HTTP 标头中,我有:

Content-Type    text/html; charset=UTF-8

为什么 é 没有正确显示?


更新: 包含é的数据是从互联网上抓取的;爬虫是用 Microsoft .Net 编写的。 我使用 mysql .Net Connector 连接 MySQL。

显示é的页面是用php编写的。

【问题讨论】:

你的文件真的是用 utf-8 编码的吗?尝试强制您的浏览器编码为 latin1/iso-8859-1 或将您的标头更改为那个。 é 来自哪里?数据库或嵌入在 PHP 文件中的字符串中? 嗨 Salman A,'é' 来自数据库,我使用 phpmyadmin 检查数据库,没问题,我可以正确看到 'é'。抓取到html页面后,问题就来了。 【参考方案1】:

如果你真的使用htmlentities(),你可以解码一段特定的代码,比如

htmlentities($string, $flags, $charset);

这将对字符串进行编码。 使用 $flags,您可以在一定程度上决定要编码的内容。

这个功能可以用来防止sql注入

虽然此参数在技术上是可选的,但如果您使用的是 PHP 5.5 或更早版本,或者您的 default_charset 配置选项可能针对给定输入设置不正确,我们强烈建议您为代码指定正确的值。

编辑:来源htmlspecialchars

【讨论】:

【参考方案2】:

遇到同样的问题,即使使用 html 设置 charset=UTF-8 只需使用记事本和使用 UTF-8 编码的 File-SaveAs 打开 html 页面 重新加载页面,应该没问题。

史蒂夫

【讨论】:

【参考方案3】:

您需要添加更多信息,但 通常表示数据中被视为 UTF-8 的 ISO-8859-1 字符。

它来自

声称是 UTF-8,但实际上保存为 ISO-8859-1/Windows-8252 的源文件 - 在编辑器或 IDE 中检查文件编码

即使数据库表是 UTF-8 也使用 ISO-8859-1 的数据库连接

【讨论】:

嗨佩卡,感谢您的回复。我已将mysql连接的默认字符集设置为utf8。我将我的 html 保存到本地文件中。用记事本++打开它,它告诉我该文档是“在没有BOM的情况下以UTF-8编码”。这是否意味着我的 html 页面是用 UTF-8 编码的? @syking 在这种情况下,您的数据库连接可能不是 UTF-8。见How can I store the '€' symbol in MySQL using PHP? 哦,对不起,我忘了提一下,我的数据库、表和字段都是 utf-8 格式并使用 utf8_general_ci 排序规则。这就是为什么我自己无法弄清楚的原因。 @syking 阅读了链接的答案。 连接也需要切换到UTF-8。【参考方案4】:

确保您的文件的开头没有BOM (byte order mark)。我最近遇到了这个问题,即使文件被保存为 utf8(检查了几次),BOM 混淆了 firefox 并且错误地显示了元音变音(我将 html <meta> 标签设置为正确的编码和 http 标头)

【讨论】:

【参考方案5】:

最可能的解释是页面没有使用 UTF-8 编码,所以当浏览器尝试解码文本时,它使用了错误的编码。

您需要确保actual document encoding 与claimed encoding 匹配

【讨论】:

以上是关于为啥我的页面不能显示é,而是显示�?的主要内容,如果未能解决你的问题,请参考以下文章

[element-ui]为啥我的级联选择器不能滚动,而是全部显示出来了

Laravel + VueJS - 组件不显示

为啥我的一张图片没有显示在 Gatsby 页面上?

我的网站左上角的icon图标有的页面显示出来,有的页面显示不出来,这是为啥?

为啥控制器发送的 html 代码显示在我的页面中? [复制]

为啥我的页面无法在 Internet Explorer 中正确显示?