【问题标题】:PHP Encoding (Guess UTF-8)PHP 编码(猜测 UTF-8)
【发布时间】:2010-11-11 11:11:38
【问题描述】:

我正在编写一个系统,以便用户可以编辑他发布的内容。简化它是一个存储在数据库中的文本区域/输入字段和一个检索它的页面。问题是,我认为编码不好,因为字符串存储在数据库中,如“é”或其他东西(phpmyadmin 视图)。

插入页面:

  1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  2. 我插入mysql_real_escape_string($_POST['field']);

输出页面:

  1. 来自数据库的对象。
  2. htmlspecialchars($object->field);

但预期是: 输出页面:

  1. 来自数据库的对象。
  2. htmlentities($object->field);,对吧?

为什么数据没有正确存储在MySql中?

【问题讨论】:

    标签: php mysql database encoding utf-8


    【解决方案1】:

    如果您的数据库编码设置为 utf-8,您也需要将传输编码设置为 utf-8。为此,您必须查询

    SET NAMES utf8;
    

    在插入表格之前。

    【讨论】:

    • +1 这是在 phpMyAdmin 中查看正确编码所必需的。但是,通常不需要从已放入的 DB 中获取相同的内容。
    • 这是真的 Andre,但是如果您使用错误的字符集连接到数据库,那么您实际上可能在数据库表中存储了错误编码的数据。这显然是不可取的。
    【解决方案2】:

    数据库连接是UTF-8吗?请记住,这不是默认编码,您必须自己明确设置。

    【讨论】:

      【解决方案3】:

      你必须告诉 htmlentities 你用 UTF-8 输入它:

      htmlentities($text, ENT_COMPAT, "UTF-8");
      

      否则它假定它获得了 ISO-8859-1。

      【讨论】:

      • 也许我正在寻找不同的东西,因为我已经在数据库中放置了一些东西(“Testé”),并且它在 htmlentities($text) 中显示得很好;如何在没有 phpmyadmin 帮助的情况下正确插入“Testé”?
      【解决方案4】:

      这个网站http://developer.loftdigital.com/blog/php-utf-8-cheatsheet 应该让您了解 PHP 和 MySQL 中的 UTF-8 需要什么。

      哦,别忘了在连接到您的数据库后使用这些:

      mysql_query("SET NAMES 'utf8'");
      mysql_query("SET CHARACTER SET 'utf8'");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-06
        • 2012-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-15
        • 2011-05-11
        • 2011-05-09
        相关资源
        最近更新 更多