2012-04-26 26 views
14

bộ bàn char của tôi là utf8 và nó collation là utf8.now tôi có mã này:utf 8 - PHP và 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"); 

    } 

nhưng ra đặt là:

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

những gì tôi có thể làm gì? Edit: i thay thế:

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'); 

với

$mysqli->set_charset("utf8") 

nhưng không có sự khác biệt.

+0

Cơ sở dữ liệu của bạn có thiết lập bảng kollation utf8 không? – tonymarschall

+0

@tonymarschall đúng vậy. –

Trả lời

42

Hãy thay thế mysql_set_charset('utf8');-$mysqli->set_charset("utf8") :-)

+0

tôi đã thay đổi điều đó nhưng không có sự khác biệt –

+2

Bạn đã sử dụng mã hóa utf 8 trong tiêu đề trang của bạn, nơi đầu ra này đang đến. –

+0

cảm ơn nó đã hoạt động! –

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

kịch bản thú vị có thể giúp người khác ra. Không có chi tiết kỹ thuật/giải thích và thay vào đó chỉ là một push/đầu mối đi đúng hướng.

Kịch bản: tạo tự động từ xa Tài khoản người dùng dựa trên Giao dịch PayPal IPN thành công/được xác minh. Mysqli Query tạo ra dữ liệu người dùng và usermeta, nhưng giá trị của dữ liệu đó chứa các ký tự định dạng ẩn và vô hiệu hóa việc sử dụng dữ liệu đó được gọi trong xử lý Biểu mẫu. Giải pháp rất đơn giản mà không thay đổi/thay đổi bất kỳ bảng DB hiện có nào. Về cơ bản, điều này đảm bảo rằng dữ liệu của bạn chỉ là các ký tự in được ASCII và thậm chí sử dụng $ mysqli-> set_charset ("utf8"); không thực sự quan trọng vì bạn đang chuẩn bị dữ liệu của mình để được xử lý và nhập "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

Khi lấy dữ liệu từ cơ sở dữ liệu, bạn không chỉ nhận được các dữ liệu chính xác, nhưng cũng cần phải hiển thị nó trên các trang một cách chính xác, vì vậy hãy thử sử dụng mã UTF-8 trong tiêu đề trang của bạn:

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

<meta charset="utf-8">

Đó là vấn đề và giải pháp của tôi, nhờ Rohit Kumar Choudhary.