【问题标题】:Converting html entities to utf-8 and inserting them into a mysql database将 html 实体转换为 utf-8 并将它们插入到 mysql 数据库中
【发布时间】:2012-10-12 15:34:40
【问题描述】:

我正在尝试将字符串从 HTML-ENTITIES 转换为 UTF-8,然后将编码的字符串保存在我的数据库中。 html 实体是希腊字母,例如:νω

现在我尝试了数千种不同的方法,从仅使用 utf8_encode 或 html_entity_decode 开始,直到现在我遇到了函数 mb_convert_encoding()。 现在真正奇怪的是,在转换我的字符串然后输出它时,它被正确编码为 utf-8,但是当将此字符串插入我的数据库时,我最终得到类似:ξÏνω

这是编码的代码:

header('Content-Type: text/html; charset=utf-8');
mb_internal_encoding('utf-8');
......
while($arr = $select->fetch_array(MYSQLI_ASSOC))
{   
$text = $arr["greek"];
$result = mb_convert_encoding($text, 'UTF-8', 'HTML-ENTITIES');  
$mysqli->query("UPDATE some SET greek = '".$result."'");    
}

当输出我的查询然后在 phpmyadmin 中手动执行 sql 查询时,它工作正常,所以它似乎不是我的数据库的问题。将编码的字符串传输到我的数据库时一定有问题...

【问题讨论】:

  • 数据库中的表是什么字符集?默认为 latin1,您需要将其更改为 utf-8。这是您应该检查的第一件事。
  • 数据库设置为utf-8。
  • 你能在调用 query() 函数之前回显你的查询吗?看起来对吗?
  • 我回应了UPDATE some SET greek = '".$result."',它被正确编码为utf-8(也在我的浏览器的源代码中)。这就是我得到的正确答案:UPDATE some SET greek = 'ξύνω'

标签: php mysqli


【解决方案1】:

正如您在脚本中看到的,您正在指示浏览器使用 UTF8。这是第一步。

但是您的数据库需要相同的东西,并且表上的编码/排序规则也需要是 UTF8。

您可以使用utf8_general_ciutf8_unicode_ci 作为排序规则重新创建表,或转换现有表(请参阅here

您还需要确保您的数据库连接,即到 mysql 的 php 代码使用的是 UTF8。如果您正在使用 PDO,那么有很多文章展示了如何做到这一点。最简单的方法是:

$mysqli->query('SET NAMES utf8');

注意您现在所做的更改是最终的。如果更改数据库的连接编码,可能会影响现有数据。

编辑您可以执行以下操作来设置连接

$mysqli = new mysqli($host, $user, $pass, $db);

if (!$mysqli->set_charset("utf8")) {
   die("Error loading character set utf8: %s\n", $mysqli->error);
}

$mysqli->close();

感兴趣的链接:

Whether to use "SET NAMES"

【讨论】:

  • 我必须将整个数据库设置为utf8吗?将我使用的表的字符集设置为utf8还不够吗?因为当输出$mysqli->character_set_name() 时它给了我latin1,所以整个数据库不在utf8 中,但表是。我很困惑...
  • 这里有两个问题。一个是您的表,即存储数据的位置,一个是 PHP 和 MySQL 之间的连接。通过在表上设置编码,您可以解决问题 1。通过将连接字符串设置为 UTF8,您可以解决 #2。 $mysqli->character_set_name() 返回连接的默认字符集(PHP 到 MySQL)。现在这是你的问题。它应该返回 UTF8。
  • 看看我的回复 - 我做了一个编辑,可能对你有帮助
【解决方案2】:

在任何其他查询之前执行SET NAMES 'utf8' 查询。

【讨论】:

  • 为时已晚 :-) 为 Nikolaos 竖起大拇指
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 2011-03-02
  • 2020-04-12
  • 2015-02-25
相关资源
最近更新 更多