【问题标题】:Encoding issue: £ pound symbol appearing as <?> symbol编码问题:英镑符号显示为 <?> 符号
【发布时间】:2011-04-12 14:01:56
【问题描述】:

我的数据库字段设置为 utf8_general_ci,我的网站编码是 utf8。

£ 符号以黑色菱形的形式出现,中间有一个问号。

我尝试在数据库中将其更改为&amp;pound;,它只是输出了£

我尝试了字符串替换:

  $row['Information'] = str_replace("£", "&pound;", $row['Information']);

似乎没有任何效果,有什么想法吗?

【问题讨论】:

  • 你的脚本文件是什么编码的?
  • 脚本文件是utf-8,谢谢

标签: database encoding utf-8 character


【解决方案1】:

我尝试在数据库中将其更改为&amp;pound;

不要。数据库应该包含原始文本,而不是 HTML 编码的内容。 HTML 编码(使用htmlspecialchars())的时间是在输出模板阶段将一些原始文本插入 HTML 时,而不是之前。即使你让这个工作,你也只能固定一个字符;其他 107025 个非 ASCII 字符仍会中断。

显然这里的编码不匹配;您必须确保在任何地方都使用相同的编码(最好是 UTF-8),尤其是:

  • 您保存 PHP 文件的编码(如果它包含任何非 ASCII 字符);
  • 在输出页面上声明的字符集(通过 Content-Type &lt;meta&gt;header(),最好同时使用两者;如果您只使用 &lt;meta&gt; 来设置它并且服务器配置不正确,它可能会设置自己的 @987654326 @覆盖你的);
  • 数据库中列的编码(每一列都有自己的排序规则,所以只在表上设置是无效的);
  • PHP 用于与 MySQL 通信的编码。这应该使用mysql_set_charset 设置。

很遗憾,这些设置都没有默认为 UTF-8。

【讨论】:

  • 使用 mysql_set_charset 修复了它——我从来没有听说过这个。我还按照您的建议将数据库清理为原始文本,谢谢
【解决方案2】:

在与数据库通信之前,您需要发送查询:

SET NAMES 'UTF-8'

它告诉数据库对该连接上的所有查询使用 utf8 编码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 2019-05-24
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多