【问题标题】:UTF-8 problem when saving to mysql保存到mysql时出现UTF-8问题
【发布时间】:2010-11-10 11:14:34
【问题描述】:

我的网站正在使用字符集 iso 8859 1

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

当用户发布汉字时,它会以 & # 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 时是这样的 你好 当它被检索到显示是这样的ä½ å¥½

【问题讨论】:

  • 您使用哪种服务器端语言?
  • 是的,具体的问题是什么?这样做的哪一部分不清楚?
  • 我正在使用 php。我已经编辑了帖子。 tq

标签: php mysql encoding character-encoding


【解决方案1】:

我看到很多与编码相关的问题 楼主在发帖前先google一下

一般检查清单:

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

【讨论】:

  • Javascript、XML、Smarty、编辑器/IDE 默认编码……一切都必须是 utf-8。
【解决方案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 ; & # 2 2 9 0 9 ; 而不是时髦的字符。”

这可能最好在您的脚本语言中解决,而不是在 MySQL 中。如果使用 PHP,您也许可以使用 htmlentities() 来实现此目的。

【讨论】:

  • 它无法正常工作。我的脚本正在使用 $message = htmlentities(strip_tags(mysql_real_escape_string($_POST['message']),''));当它保存到 mysql 时,它就像这样 你好当它被检索到显示是这样的ä½ å¥½
  • 想知道这个帮助吗? htmlentities( $char, ENT_COMPAT, 'UTF-8')
  • 不要使用htmlentities($string),而是尝试添加前两个可选参数:htmlentities($string, ENT_COMPAT, 'UTF-8')
  • ajreal 在我之前到达那里。
  • 也许 htmlentities 不会改变中文字符。我的错。但是,如果它保存为错误编码的字符,那么沿线的某些内容配置错误。您必须检查 1. 列编码设置为 UTF-8; 2.连接和客户端字符集设置为UTF-8; 3. 当字符串到达​​您的站点时,该字符串实际上是以 UTF-8 而不是 ISO-8859-1 编码的 - 最好的方法是确保您在所有表单页面和所有页面上发送 UTF-8 标头将在哪里查看材料,和/或在指定 UTF-8 编码的相同页面上使用元标记。
【解决方案3】:

如果您在使用另一种编码后尝试转为 UTF8,请尝试以下步骤:

  1. 在您的表上运行 ALTER TABLE tablename CONVERT TO CHARACTER SET UTF8

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

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

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

如果你做了所有这些步骤,一切都会正常。

【讨论】:

    【解决方案4】:

    用户 N 在您的值之前。喜欢:

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-31
        • 2011-06-05
        • 2017-05-20
        • 2014-01-15
        • 1970-01-01
        • 2017-03-07
        • 1970-01-01
        相关资源
        最近更新 更多