2012-04-26 20 views
14

benim masa karakter seti utf8 olduğunu ve ben bu koduna sahip utf8.now harmanlama olduğunu var: koymakutf 8 - PHP ve 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"); 

    } 

ama dışarı geçerli:

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

ne ben can yap? Düzenleme: i değiştirilir:

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") 

ancak hiçbir fark

ile.

+0

Veritabanınız/tablo kurulumunuz utf8? – tonymarschall

+0

@tonymarschall evet öyle. –

cevap

42

başkası yardım edebilir mysql_set_charset('utf8'); :-) $mysqli->set_charset("utf8") için

+0

bunu değiştirdim ama fark yok –

+2

Bu çıkışın geldiği sayfa üstbilginizde utf 8 kodlama kullandınız mı? –

+0

teşekkürler! –

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

İlginç senaryoyu değiştirin. Teknik detaylar/açıklamalar yok ve sadece doğru yönde bir itme/ipucu.

Senaryo: Başarılı/VERIFIED IPN PayPal İşlemine dayanan bir Kullanıcı Hesabının uzaktan otomatik oluşturulması. Mysqli Query, kullanıcı ve usermeta verilerini oluşturur, ancak bu verilerin değeri gizli biçimlendirme karakterleri içerir ve Form işleminde adı geçen bu verilerin kullanımını geçersiz kılar. Mevcut DB Tablolarını değiştirmeden/değiştirmeden çok basit bir çözüm. Temel olarak bu, verilerinizin sadece ASCII yazdırılabilir karakterler olmasını ve hatta $ mysqli-> set_charset ("utf8") kullanılmasını sağlar; Verilerinizi işlenecek ve "ASCII clean" yazılacak şekilde hazırladığınızdan bu kadar önemli değil. veritabanından veri toplarken

$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

, sadece doğru veri almak değil, aynı zamanda doğru sayfalarında göstermek gerekir, bu nedenle sayfa başlığında UTF-8 kodlaması kullanan kalkma:

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

Rohit Kumar Choudhary benim sorunu ve çözümü sayesinde var

<meta charset="utf-8">

.