PHP - > mysql编码错误

时间:2014-07-11 20:18:53

标签: php mysql encoding utf-8

我尝试连接到mysql数据库并获取 UTF-8 中的字符串。

       <?php 
        $con=mysqli_connect("localhost","root","pass","db");
        mysql_set_charset('utf-8');
        mysql_query("set names 'utf8'");
        mysql_query('set character set utf8');

但是下面的代码回应我,我从db获得的字符串是用 ASCII 编码的。

        $result = mysqli_query($con,"SELECT * FROM tweet");
        $content =array();
        while($row = mysqli_fetch_array($result)) {
                     $content[] =$row['content'];
         }
        echo mb_detect_encoding($content[0]);//this line prints: ASCII
        mysqli_close($con);
        ?>

使用下面的代码我得到除'ğ','ş','ı'之外的所有土耳其字符。

 $current_encoding = mb_detect_encoding($content[0], 'auto');
 for($x=0;$x<sizeof($content);$x++){
    $content[$x] = iconv($current_encoding, 'UTF-8', $content[$x]);}
 echo mb_detect_encoding($content[0]);//this line again prints: ASCII

如何从 UTF-8 编码的db中获取字符串?

1 个答案:

答案 0 :(得分:0)

因为您使用mysqli_connect连接到数据库,所以需要使用:

mysqli_set_charset( $con, 'utf-8');

而不是

mysql_set_charset('utf-8');
mysql_query("set names 'utf8'");
mysql_query('set character set utf8');

刚连接数据库后。然后,您将无需使用任何mb_detect_encoding或iconv函数,因为假设数据已正确插入,您也将获得正确的结果。

您还应该确保您的表/字段设置了utf8编码,例如utf8_encode_ci