使用PHP从MySQL读取Unicode字符

时间:2012-01-16 15:24:28

标签: php mysql string unicode utf-8

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

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

我正在尝试读取该表并将数据导出为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");
%>

3 个答案:

答案 0 :(得分:1)

连接到SQL服务器时,还将charset设置为utf-8:

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

$mysqli->set_charset("utf8");

答案 1 :(得分:0)

我认为你的连接字符集不是utf8,这就是字符转换为'?'的原因。

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

发布查询结果:     显示'char%';

等变量

答案 2 :(得分:0)

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

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

此外,如果您要输出HTML页面,那么它也应该包含UTF8字符集。如果一切正确,UTF8字符应该可以正常显示。

祝你好运!