编码问题:£磅符号显示为<! - ? - >符号

时间:2010-09-15 09:07:08

标签: database encoding utf-8 character

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

£符号出现在黑色钻石上,中间有一个问号。

我尝试将其更改为数据库中的&pound;并输出£

我尝试了一个字符串替换:

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

似乎没什么用,有什么想法吗?

2 个答案:

答案 0 :(得分:4)

  

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

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

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

  • 您保存PHP文件的编码,如果它包含任何非ASCII字符;
  • 在输出页面上声明的字符集(按内容类型<meta>header(),最好是两者;如果您只使用<meta>来设置它,并且服务器配置不正确可以设置自己的charset覆盖你的;)
  • 数据库中列的编码(每列都有自己的排序规则,因此只需在表上设置它就无效了);
  • PHP用于与MySQL通信的编码。这应该使用mysql_set_charset
  • 设置

不幸的是,这些设置都没有默认为UTF-8。

答案 1 :(得分:1)

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

SET NAMES 'UTF-8'

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