2010-07-12 17 views
8

ISO-8859-1 kümesinin bir parçası olmayan herhangi bir karakterin karakter referanslarına dönüşmesi için, UTF-8'deki metni ISO-8859-1'de kodlanmış metne dönüştürmem gerekir. (Ex β)PHP'de utf8'i latin1'e dönüştürün. 255'in üzerindeki tüm karakterler char referanslara dönüştürür

Örnek: Ben PHP tüm yapıyorum

hello é β 水 

içine

hello é β 水 

gibi metni açmak istiyorum. Yerleşik fonksiyonları, ikonları, düzenli ve bunların kombinasyonlarını denedim ve hala güvenilir bir çözüm bulamıyorum. İşte

şimdiye kadar

// convert any characters fount in the entity table into HTML entities 
// do not double encode entities, do not mess with quotes 
// use UTF-8 as character encoding because the page submits UTF-8 
$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false); 
//print $str."\n"; 

// convert text from UTF-8 to ISO-8859-1, 
// characters that cannot be converted will be converted to ? 
$str = utf8_decode($str); 
//print $str."\n";  

// make string XML valid. 
// mainly it converts text entities into numeric entities. 
$opts = array( "output-xhtml"  => true, 
      "output-xml"  => true, 
      "show-body-only" => true, 
      "numeric-entities" => true, 
      "wrap"    => 0, 
      "indent"   => false, 
      "char-encoding" => 'latin1' 
     ); 
$tidy = tidy_parse_string($str, $opts,'latin1'); 
tidy_clean_repair($tidy); 
$str = tidy_get_output($tidy);  
//print $str."\n"; 
+0

('htmlentities kullanarak 'merhaba é β 水', ENT_COMPAT, ' UTF-8 ') 'en azından' é 've' β' 'yi HTML girişlerine dönüştürebilirsiniz (adlandırılmış varlıklar.) Bu yeterli midir? – NikiC

+0

Tabi ki bu yeterli değil. Son karakter, burada ana sorun. Lütfen son sonuca (XML veri) izin verilmez ve ISO-8859-1'in karakter olarak kalmasını istiyorum. –

cevap

11

Sen baytlı desteğe ihtiyaç olacak ne var. Özellikle, mb_encode_numericentity():

$convmap= array(0x0100, 0xFFFF, 0, 0xFFFF); 
$encutf= mb_encode_numericentity($utf, $convmap, 'UTF-8'); 
$iso= utf8_decode($encutf); 

(Bu dokunmuyor <, &, " vb ayrıca önceden htmlspecialchars() gerekebilir böylece.)

+0

Çok teşekkür ederim. Bu işlevleri daha önce nasıl farkettiğimi bilmiyorum. –

+0

Maalesef, mb işlevleri varsayılan derlemenin bir parçası değildi, bu yüzden her yerde her zaman mevcut değildi. Bugünlerde çoğu sunucuda onları görmeyi beklerdim. – bobince

+0

Teşekkür ederim. Bir çekicilik gibi çalışır. –

İlgili konular