2012-07-26 12 views
9

Bir PHP web uygulaması yapıyorum ve UTF-8'de çalışıyor. Veritabanı UTF-8, sayfalar UTF-8 olarak sunuldu ve charset'i UTF-8'e bir meta etiketi kullanarak ayarladım. Tabii ki, Internet Explorer'ı kullanan ve Microsoft Office'ten & yapıştıran kullanıcılarla, bazen UTF-8 girdisi bazen almayı başaramıyorum.Kullanıcı girişini UTF-8'e dönüştürmenin en iyi yöntemi

HTTP 400 Bad Request hatasını çözmek için ideal bir çözüm olacaktır, ama tabii ki bunu yapamıyorum. Sonraki en iyi şey, $_GET, $_POST ve $_REQUEST'un UTF-8'e dönüştürülmesidir. Girdi'yi kodlayan karakteri görmek için zaten var mı? Böylece iconv'a iletebilir miyim? Değilse, bunu yapmak için en iyi çözüm nedir?

cevap

8

Kontrol dışarı mb_detect_encoding() Örnek: dize ISO-8859-1 olarak girdi olduğunu garanti utf8_encode() eğer da var

$utf8 = iconv(mb_detect_encoding($input), 'UTF-8', $input); 

.

+0

Açıkçası dizenin ISO-8859-1 olduğunu garanti edemez, ancak 'mb_detect_encoding()' iyi görünüyor –

0

Bazı durumlarda, sadece utf8_encode veya genel kontroller kullanmanız yeterlidir, ancak dizede bazı karakterleri kaybedebilirsiniz. Çeşitli türlere dayalı bir temel dizi/dize listesi oluşturabilirseniz, bu örnek pencerelerdir, biraz daha fazla para kazanabilirsiniz.

if(!mb_detect_encoding($fileContents, "UTF-8", true)){ 
    $checkArr = array("windows-1252", "windows-1251"); 
    $encodeString = ''; 
    foreach($checkArr as $encode){ 
     if(mb_check_encoding($fileContents, $encode)){ 
      $encodeString .= $encode.","; 
     } 
    } 
    $encodeString = substr($encodeString, 0, -1); 
    $fileContents = mb_convert_encoding($fileContents, "UTF-8", $encodeString); 
} 
İlgili konular