2012-04-26 67 views
14

我的表字符集是UTF8,它的排序是utf8.now我有这样的代码:UTF-8 - PHP和库MySQLi UTF8

$mysqli = new mysqli("localhost", "root", "", "Amoozeshgah"); 

      if (mysqli_connect_errno()) { 
        printf("Connect failed: %s\n", mysqli_connect_error()); 

      } 
      if (!$mysqli->set_charset("utf8")) { 
    printf("Error loading character set utf8: %s\n", $mysqli->error); 
} else { 
    printf("Current character set: %s\n", $mysqli->character_set_name()); 
} 
     mysql_set_charset('utf8'); 
      if ($stmt = $mysqli->prepare("SELECT About_Title FROM Tbl_About WHERE About_Id=?")) { 
       $city = 8; 

       /* bind parameters for markers */ 
       $stmt->bind_param("s", $city); 

       /* execute query */ 
       $stmt->execute(); 

       /* bind result variables */ 

        $result = $stmt->get_result(); 

      /* fetch value */ 
      while ($myrow = $result->fetch_assoc()) { 

     // use your $myrow array as you would with any other fetch 
     printf("%s is in district %s\n", $city, $myrow['About_Title']); 
     print("shod"); 

    } 

但出来的说就是:

Current character set: utf8 8 is in district نتمنتشس shod 

我能做? 编辑: 我代替:

if (!$mysqli->set_charset("utf8")) { 
     printf("Error loading character set utf8: %s\n", $mysqli->error); 
    } else { 
     printf("Current character set: %s\n", $mysqli->character_set_name()); 
    } 
      mysql_set_charset('utf8'); 

$mysqli->set_charset("utf8") 

,但没有什么区别。

+0

是你的数据库/表设置赞美utf8? – tonymarschall 2012-04-26 10:51:55

+0

@tonymarschall是的。 – 2012-04-26 11:19:26

回答

42

请更换mysql_set_charset('utf8');$mysqli->set_charset("utf8") :-)

+0

我改变了这一点,但没有区别 – 2012-04-26 11:18:43

+2

您是否在您的页面标题中使用了utf 8编码,此输出即将到来。 – 2012-04-26 11:22:42

+0

感谢它的工作! – 2012-04-26 11:27:02

14
or mysqli_set_charset($this->mysqli,"utf8"); 
mysqli_set_charset($conn,"utf8"); 
0

有趣的场景,可以帮助别人了。没有技术细节/解释,而只是一个正确的方向推动/线索。

场景:基于成功/通过IPN PayPal交易的用户帐户的远程自动创建。 Mysqli Query创建用户和用户数据数据,但该数据的值包含隐藏的格式化字符,并且无法使用表单处理中调用的数据。非常简单的解决方案,无需更改/更改任何现有数据库表。基本上这可以确保你的数据只有ASCII可打印的字符,甚至使用$ mysqli-> set_charset(“utf8”);并不是那么重要,因为您正在准备处理数据并输入“ASCII clean”。

$create_ipn = $mysqli->prepare("INSERT INTO xxx_somewhere (some_ipn_parameter , email, domain, item) VALUES (?, ?, ?, ?)"); 
    $create_ipn->bind_param("ssss", $some_ipn_parameter, $email, $domain, $item); 

    $some_ipn_parameter = preg_replace('/[^\x01-\x7F]/', "", 'the_actual_ipn_data'); 
    $email = '[email protected]'; 
    $domain = ''; 
    $item = 'Test'; 
    $create_ipn->execute();   
0

时,取从数据库中的数据,你不只是正确地获取数据,也需要正确地显示它的网页上,所以尽量在网页标题使用UTF-8编码:

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

<meta charset="utf-8">

这是我的问题和解决方案,这要归功于罗希特·库马尔·乔杜里。