2011-09-30 13 views
13

Aşağıdaki kodun bir çevirisi PHP kullanılarak mümkün mü?PHP'de UTF8 karakterlerini sayısal karakter varlıklarına dönüştürme

Aşağıdaki kod JavaScript ile yazılmıştır. Gerekirse sayısal karakter referansları ile html döndürür. Ör. smslån -> smslån

Tercüme oluştururken başarısız oldum. This script işe yarayabilir benziyordu, ama å yerine javascript aşağıda olduğu gibi å için å döndürür. o charCodeAt aynı şeyi yapar gibi

function toEntity() { 
    var aa = document.form.utf.value; 
    var bb = ''; 
    for(i=0; i<aa.length; i++) 
    { 
    if(aa.charCodeAt(i)>127) 
    { 
     bb += '&#' + aa.charCodeAt(i) + ';'; 
    } 
    else 
    { 
     bb += aa.charAt(i); 
    } 
    } 
    document.form.entity.value = bb; 
} 

PHP's ord function geliyor, ama öyle değil. OrC ve kullanarak charCodeAt kullanarak å elde ederim. Bu, ya da bazı inanılmaz zor kodlama sorunları yaşıyorum.

+0

Sen [? Bu] (http://www.php.net/manual/en/function.mb-encode-numericentity.php#88586) veya phihag cevabını demek aşağıda, temel olarak? Ben ord bir utf8 sürümü göremiyorum. – darkAsPitch

+0

Emin değilim. Miguel'in kodunu 20 dakikalığına oynamayı denedim, ama aşağıdaki phihag'ın önerdiğim şey tam olarak ihtiyacım olan şey. Zaten bu uygulama açısından. Olmadığına inanmak için bir sebep var mı? – darkAsPitch

cevap

32

Kullanım mb_encode_numericentity:

$convmap = array(0x80, 0xffff, 0, 0xffff); 
echo mb_encode_numericentity($utf8Str, $convmap, 'UTF-8'); 
+1

Evet, cevap vermek istediğimde, bunu zaten yaptığınızı gördüm, fark ettim. ;) Bu iş için gerçekten harika bir işlev. – hakre

+3

Beni endişelendiren tek şey $ convmap - tam olarak nedir? Kılavuz sayfasında büyük bir açıklama yok. Mümkün olan tüm dönüşümleri veya bir şeyi girmek zorunda mıyım? Zayıf aklım, onu "dönüşüm haritası" olarak okur. – darkAsPitch

+6

@darkAsPitch Bu dağınık. '$ convmap', hangi karakterlerin kodlanacağını belirtir. Bu gerçekten bir geri çağırma işlevi olmalı, ancak bu muhtemelen yavaş olacaktır ve geri aramaların php'de kullanımı zaten işlevlerden önce gelir. İlk iki sayı, dönüştürülecek karakter kodlarının aralığını (dahil) ve üçüncü ve dördüncü ve ofset ve bir bit maskesini (tüm pratik amaçlar için 0 ve 0xfff) belirtir. Örneğin, tüm karakterleri HTML öğelerine dönüştürmek istiyorsanız, 'array (0, 0xfff, 0, 0xfff)' seçeneğini belirtin. Temel olarak, '(0x80, 0xffff, ..)', sorunuzdaki 'charCode> 127' nin karşılığıdır. – phihag