【问题标题】:Why database result doesn't show accents?为什么数据库结果不显示口音?
【发布时间】:2014-10-06 01:28:36
【问题描述】:

我正在将一个项目从名为“Freekore”的 CMS 迁移到 CodeIgniter,使用我的旧 CMS 我没有遇到此问题,但使用 CI 我无法弄清楚为什么我在使用 ñ,á,é,í 等特殊字符时遇到问题等等。 我想我什么都试过了。
我在标题中得到了这个

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

也添加了这个

<?php header('Content-Type: text/html; charset=UTF-8'); ?>

关于数据库配置

$db['local']['char_set'] = 'utf8';
$db['local']['dbcollat'] = 'utf8_general_ci';

在配置文件中

$config['charset'] = 'UTF-8';

但我还是明白了

COMUNICACIÓN Y PRODUCCIÓN EDITORIAL

而不是这个

COMUNICACIÓN Y PRODUCCIÓN EDITORIAL

啊,还把它加到了.htaccess中

AddDefaultCharset UTF-8

编辑
使用this,我发现当前字符集是latin1,但是怎么做呢?我检查了数据库和表,是utf8_general_ci

编辑 2
我做了一个新数据库并检查了每一列排序规则,现在我在数据库、每张表和每一行上都使用utf8_unicode_ci,但我仍然遇到同样的问题当前字符集是latin1强>

编辑 3
我决定使用utf8_decode 并且似乎可以工作,但我仍然遇到大写问题

【问题讨论】:

    标签: php mysql codeigniter character-encoding


    【解决方案1】:

    在寻找可以帮助我解决问题的东西几个小时后,我找到了一个非常简单的答案in this post,所以在执行插入之前,我使用了这个mysql_query("SET NAMES utf8");,现在字符按应有的方式显示。非常感谢你的帮助。

    【讨论】:

      【解决方案2】:

      在使用此函数将数据放入新数据库之前,您是否尝试过以 UTF-8 编码数据:http://www.w3schools.com/php/func_xml_utf8_encode.asp

      【讨论】:

      • 我该如何应用这个?我是否必须将所有数据重新插入到新数据库中?
      • 好吧,如果您保持相同的数据库结构,您只需逐个表格地从表格中抓取所有数据并将其插入到您的新数据库中。 Select * FROM your_original_table 然后在 PHP 中,您只需获取所有数据,然后重新插入即可: $query = "INSERT INTO table_name VALUES (".utf8_encode($value1).", ".utf8_encode($value2)." , ".utf8_encode($value3).",...)
      • 我在工作中遇到了这个问题,我现在真的很忙,但我会看看,如果可以的话我会回复找到有用的东西。
      • 如果你知道什么样的字符是个问题,你可以尝试使用 str_replace 函数将坏字符替换为好字符,我不得不在我的表导入文件中做类似的事情。 .look : $data = str_replace("'", "'", $data); $data = str_replace("\\", "", $data); $data = str_replace("
        ", "", $data); $data = str_replace("
        ", "", $data); $data = str_replace("
        ", "", $data); $data = str_replace(" ", " ", $data);
      • 我找到了一种更简单的方法,我使用了utf8_decode 并且它正在工作,但我仍然无法理解是什么导致了这个问题。非常感谢您的帮助!
      【解决方案3】:

      我认为您需要将数据库集合更改为 UTF 8
      执行以下查询。

      ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
      ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
      

      希望它能解决您的问题。

      【讨论】:

        【解决方案4】:

        数据库表本身的排序规则不是 UTF-8 unicode。例如在 phpmyadmin 中查看这里:

        您需要更新排序规则。如果你没有phpmyadmin,可以使用如下命令:

        ALTER TABLE `test_table` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
        

        【讨论】:

        • 这样做了,没有任何改变
        • 重新导入数据。使用 php utf8_encode() 并再次插入数据。
        【解决方案5】:

        您的问题可能是utf8_general_ci(MySQL 5.x 默认)作为您的排序规则。大多数人对并非所有 UTF8 都相同感到惊讶。在大多数情况下,您有 3 种一般的“风味”

        • utf8_general_ci
        • utf8_unicode_ci
        • utf8mb4

        区别在于 UTF8 使用了多少字节。 utf8mb4 是完整的 UTF8 字符集,而 utf8_general_ci 是一个小子集,涵盖了大多数拉丁字符集,但可能不涵盖您提到的字符。如果您切换到utf8_unicode_ci,它可能会覆盖它们。问题是您使用的字节数越多,您的数据库在处理该数据时运行的速度就越慢。

        这个帖子更详细地讨论了它。 What's the difference between utf8_general_ci and utf8_unicode_ci

        【讨论】:

        • 可能是旧数据以非 UTF8 格式输出。旧的排序规则是什么?
        • 表格排序规则是utf8_general_ci
        【解决方案6】:

        回显 utf8_encode($row['$your_field']);

        【讨论】:

          猜你喜欢
          • 2016-04-08
          • 2022-11-11
          • 2018-04-25
          • 2021-12-17
          • 2013-05-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多