【问题标题】:Reading Unicode characters from MySQL with PHP使用 PHP 从 MySQL 读取 Unicode 字符
【发布时间】:2012-01-16 15:24:28
【问题描述】:

我继承了一个 MySQL 数据库,其中包含一个名为 Description of type text 和 collat​​ion of latin1_swedish_ci 的字段。

这个字段的问题是它包含带有一些 Unicode 字符的 utf-8 数据,例如字符 733 等。有时该字符也存在于以 HTML 编码的“˝”表示的字段中。

我正在尝试读取表格并将数据导出到 CSV 文件,我需要将此字符表示为双引号。

读取 HTML 编码的字符很容易。但是,实际的 Unicode 字符似乎在我可以对其执行任何操作之前转换为 utf-8,从而导致“?”。

如何读取 Unicode 字符 733 (U+02DD),识别并转换?

这是代码的简化(未经测试)版本。

<?
$testconn=odbc_connect ("TESTLIB", "......", "......");

$query="SELECT Description FROM TestTable";

$rsWeb=mysql_query($query));

$WebRow=mysql_fetch_row($rsWeb));
$Desc = $WebRow[0];
$Desc = str_replace('"','""',$Desc);

fwrite($output,"\"".$Desc."\",\r\n");
%>

【问题讨论】:

  • 我试过 html_entity_decode()。但是,该字符已经转换为“?”在我有机会使用 html_entity_decode 之前使其无用。看起来它已转换为“?”在 mysql_fetch_row 或 mysql_query 期间。

标签: php mysql string unicode utf-8


【解决方案1】:

在连接 SQL server 时也将 charset 设置为 utf-8:

http://php.net/manual/en/mysqli.set-charset.php

$mysqli->set_charset("utf8");

【讨论】:

    【解决方案2】:

    我认为您的连接字符集不是 utf8,这就是字符被转换为“?”的原因。

    阅读:http://dev.mysql.com/doc/refman/5.1/en/charset-connection.html

    发布查询结果: 显示变量,如 'char%';

    【讨论】:

      【解决方案3】:

      您确实应该只将非实体 (Unicode) 版本放入数据库,然后对其余部分进行实体解码。但是,当您想在 MySQL 中使用 UTF-8 时,需要记住以下几点:

      • 您的表格列的排序规则应该是 utf8_bin 或类似的。
      • 您的表的排序规则和数据库排序规则也应该是 utf8_bin 以防万一。
      • 您的连接字符集应为 UTF8。通过执行“SET NAMES utf8”查询来做到这一点。

      此外,如果您要输出 HTML 页面,则该页面也应具有 UTF8 字符集。如果一切正确,UTF8 字符应该可以正常输出。

      祝你好运!

      【讨论】:

        猜你喜欢
        • 2012-05-22
        • 2016-12-12
        • 1970-01-01
        • 2016-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-04
        • 1970-01-01
        相关资源
        最近更新 更多