可怕的�字符并在UTF8中显示来自数据库的信息



所以,我有一个数据库,我使用Navicat。我们有一个简单的PHP网站,它已经有几年的历史了,我们已经将网站升级到UTF8。

我们网站上有"活动",可以完美地处理UTF8特殊字符,但我们网站上也有"评论",卷曲的单引号和其他特殊字符向我显示�.

数据库通过转换为UTF

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

当我在Navicat中查看这两个数据库时,我可以看到它们都是UTF8utf8_general_ci

当我设计表格时,我可以看到"活动"表格,我可以看出单元格是一个中等文本,并且是用UTF8设置的。当我设计"注释"部分时,不起作用的单元格是Blob,它没有任何字符编码信息。

我们正在做一个非常基本的SELECT,然后通过$vailable[column]进行显示。

有人知道为什么"活动"会与UTF8完美配合,而"评论"会出现问题吗?我们没有对他们中的任何一个做任何超级花哨的事情。

我曾尝试将Blob转换为文本字段,但当我这样做时,数据库在输出到页面时会自行转义,所以只要文本中有一个引号,它就会切断。

我尝试过utf8_encode、stripslash、mysql_real_eescape_string、htmlentities、htmlspecialchar等,但我不确定它们中的任何一个都会有帮助。

谢谢!

blob表示二进制大对象。二进制数据没有任何原始编码。

因此,在一个blob中有latin1或任何数据,然后将其显示出来,并将其视为utf-8数据。

您需要使用PHP或其他工具手动转换数据。

这里有一篇来自性能博客的好文章,描述了你可以做什么:

http://www.mysqlperformanceblog.com/2013/10/16/utf8-data-on-latin1-tables-converting-to-utf8-without-downtime-or-double-encoding/

如果您在启动查询时遇到问题,请使用控制台而不是phpMyAdmin,并且不要忘记通过SET NAMES 进行连接编码

master> ALTER TABLE t CONVERT TO CHARACTER SET utf8, CHANGE comment comment TEXT;
master> SET NAMES utf8;

相关内容

  • 没有找到相关文章

最新更新