![](/img/trans.png)
[英]How do I save special characters from a textfield ('+<>$") into a database, then retrieve them with PHP?
[英]How to retrieve special Char from database?
我正在尝试从 MySQL 数据库中检索一个特殊的希腊字符µ
,但在 HTML 中它显示的是这个 �
。
我的 HTML 字符集: content="text/html; charset=windows-1252"
此外,在检索到字符后,它还需要能够使用该字符在数据库中进行比较。
我尝试将 HTML 代码放入数据库中,例如μ
; 然后它无法与数据库进行比较,因为 HTML 将其转换为µ
。
我怎样才能适当地做到这一点?
首先,我建议使用 utf8 作为您的字符集。
首先切换数据库的默认值:
ALTER DATABASE db_name CHARACTER SET utf8;
接下来,要将表切换到 utf8,请应用此 SQL:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;
你必须为每张桌子做。
最后,非常不幸的是,您必须知道转换在旧字符集(varchar、文本等)下创建的所有字符数据列。 您必须通过首先转换为 BLOB 来执行此操作,以便已经存储的字符不会被破坏:
alter table tbl_name change col_name col_name LONGBLOB;
alter table tbl_name change col_name col_name LONGTEXT CHARACTER SET utf8;
Wordpress 发布了关于如何执行此步骤的按列类型指南: 转换数据库字符集列。
然后,最后更新 xhtml 中的字符集声明(如果是 html,则不以 / 结尾):
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
这个过程是艰巨的,但会转换数据库。 在 utf8 中启动数据库要容易得多。
这一切都假设 MySQL 5,您可以看到Mysql 5 ALTER TABLE参考。
在包含特殊字符的桌子上试试这个(基于这篇文章):
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;
在 php 中使用utf8_encode()
在将其保存到数据库之前。 它会解决问题
请参阅 Shelhamer 的回答,但您还需要将 db 连接设置为 utf8。 您可以使用mysql_set_charset('utf8');
在你连接到数据库之后。 或者,在您连接后运行以下查询:
SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8';
但是,我仍然建议您在网站上显示您的内容时使用 htmlentities() 以确保所有有效的 HTML。 如果混淆编码,Firefox 往往会出错。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.