为啥我的页面不能显示é,而是显示�?
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]为啥我的级联选择器不能滚动,而是全部显示出来了
我的网站左上角的icon图标有的页面显示出来,有的页面显示不出来,这是为啥?