保存到mysql时出现UTF-8问题

时间:2010-11-10 11:14:35

标签: php mysql encoding character-encoding

我的网站正在使用charset iso 8859 1

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

当用户发布中文字符时,它将被保存到数据库中作为&amp; #2 0 3 2 0; &安培; #2 2 9 0 9;在检索时将输出为中文字符。

我需要将我的网站设置为UTF-8

当用户发布中文字符时,它将被保存为mysql中的一些时髦字符,并且在检索时,某些字符是正确的但有些字符是错误的。

我的问题是,在我设置为UTF-8后,如何将mysql保存为#2 0 3 2 0; &安培; #2 2 9 0 9;而不是时髦的角色。

我试图使用htmlentities。它不能正常工作。

我的脚本正在使用

$message = htmlentities(strip_tags(mysql_real_escape_string($_POST['message']),'<img><vid>')); 

当它保存到mysql时就像这样ä½å¥½ 当它被检索到显示时就像这样ä½å¥½&lt; ----是以前存储在mysql中的时髦角色

5 个答案:

答案 0 :(得分:5)

我看到很多与编码相关的问题 在发布之前,所有者应该谷歌一点

一般检查清单:

  1. mysql表架构使用utf-8
  2. mysql客户端连接使用utf-8 mysql --default-character-set=utf8
  3. php mysqli_set_charset to utf-8
  4. html编码为utf-8
  5. putty,emac客户......在utf-8

答案 1 :(得分:2)

你应该按照ajreal的建议将你的编码设置为UTF-8。

但是,从它的声音来看,您可能已经存储了数据库中必须转换的数据。

如果您的网站统一iso-8859-1,则很可能中文字符存储为HTML字符实体,这意味着数据不会存储错误编码,转换字符集不会导致问题。如果您执行说明并发现之后字符显示不正确,可能是因为文本存储了错误编码,在这种情况下,可以采取措施来纠正这种情况。

可以使用类似

的语法转换现有列的字符集
ALTER TABLE TableName MODIFY ColumnName COLUMN_TYPE CHARACTER SET utf8 [NOT NULL]

其中COLUMN_TYPE是CHAR(n)VARCHAR(n)TEXT之一,方括号表示NOT NULL是可选的。

修改

“我的问题是,在我设置为UTF-8后,如何使mysql将文本保存为#2 0 3 2 0;&amp;#2 2 9 0 9;而不是时髦的字符。”

这可能最好用脚本语言而不是MySQL来解决。如果使用PHP,您可以将htmlentities()用于此目的。

答案 2 :(得分:2)

如果您在使用其他编码后尝试转到UTF8,请尝试以下步骤:

  1. 运行ALTER TABLE tablename CONVERT TO CHARACTER SET UTF8 on your table

  2. 将MySQL配置为默认为UTF8,或者在建立数据库连接后运行SET NAMES UTF8查询。您只需要为每个连接运行一次,因为它将连接设置为UTF8。

  3. 在将内容传送到浏览器之前输出UTF8标头。标题('Content-Type:text / html; charset = utf-8');

  4. 在您的网页上包含UTF8内容类型元标记。 meta http-equiv =“Content-Type”content =“text / html; charset = utf-8”

  5. 如果你做了所有这些步骤,一切都应该正常。

答案 3 :(得分:1)

用户N在你的价值观之前。像:

mysql_query ("insert into ".$mysql_table_prefix."links ( url, title) values ( N'$url ', N'$title');

答案 4 :(得分:0)

尝试告诉mysql在执行任何查询之前使用utf。您可以将此查询放在所有文件中使用的任何文件中。用排序规则替换"utf8_swedish_ci"

$sql='SET NAMES "utf8" COLLATE "utf8_swedish_ci"';
mysql_query($sql);