2009-08-29 17 views
11

Karakterin bir Unicode karakteri olup olmadığını nasıl kontrol edebilirim?PHP'de Unicode'u denetle

+1

Bu bağlamda Unicode ile tam olarak ne demek istediğimi netleştirmek isteyebilirsiniz. Unicode'da tanımlanmayan karakterlerle karşılaşacağınızdan şüpheliyim, bu nedenle çekiniz her durumda 'true' döndürülebilir. – Joey

+0

Unicode karakterinin kod noktasını almak istiyorum. nasıl yapılabilir? – Orion

+0

@ Rössel: Bir dizgenin ASCII dışındaki karakterleri içerip içermediğini bilmek istediğine inanıyorum. –

cevap

19

Aslında hatta mb_string uzantısı gerekmez:

if (strlen($string) != strlen(utf8_decode($string))) 
{ 
    echo 'is unicode'; 
} 

Ve belirli bir karakterin kod noktasını bulmak için:

$ord = unpack('N', mb_convert_encoding($string, 'UCS-4BE', 'UTF-8')); 

echo $ord[1]; 
+0

teşekkürler eyeze !!!! bu kod worx .... çok teşekkürler .. – Orion

+0

@Raveesh: Cevabım sorununuzu çözdüyse kabul edildi olarak işaretleyebilirsiniz. =) –

+0

RTL, teşekkürler :) –

2
Genellikle böyle bir şey yapacağını

: Yukarý düzgün sanırım çok baytlık karakterler, taşıma (karakterleri sayarken strlen sayımları bayt, gerçekten bahsettiğini edilir: Ben eklemek gerekir

if (mb_strlen($ch) != strlen($ch)) ...

yerine unicode daha - unicode da ASCII ayırt edilemeyen yüz tek baytlık karakterler)

+0

Merhaba searlea, Hızlı yanıtınız için teşekkürler! Bu tam olarak aradığım şey. – Orion

+0

bunu kontrol ettim ve aşağıdaki gibi sonuç aldım "; echo strlen ($ ch). "
"; if (mb_strlen ($ ch)!= strlen ($ ch)) \t echo "Unicode"; başka \t echo "Unicode olmayan"; ?> onun bir sonuç sorun ne olabilir Olmayan unicode vererek? – Orion

3

fazlasını karşılıyor gibi birlikte deneyebilirsiniz

mb_check_encoding($s,"UTF-8") 

link

+1

Bu kod çalışıyor gibi görünüyor! .. ve bir unicode charecter kod noktası almak için bir işlev bulmak için bana yardımcı olabilirseniz yardımcı olacaktır? – Orion

+0

$ s "somestring" olsun, yani eğer (mb_check_encoding ($ s, "UTF-8")) sonra {string dize unicode} else {unicode değil} –

1

Bir unicode karakteri, karakterin değeri ne olursa olsun veya çok baytlı bir unicode karakterinin parçasıysa veya ne olursa olsun, HER ZAMAN en önemli bayt setine sahip olacaktır. Bazı unicode karakterler yalnızca bir bayt olduğundan, dizenin karakterlerden daha fazla bayt olup olmadığını kontrol edemezsiniz. Dizenin bayt değerindeki herhangi bir karakter 127'den büyükse, bu dizede unicode bulunur.

+0

unicode karakterinin kod noktasını nasıl alabilirim ? – Orion

+0

Bu yardımcı olmalıdır: http://www.joelonsoftware.com/articles/Unicode.html –

1

teşekkürler çocuklar .. Son olarak ben cevap var i arıyordu.

http://hsivonen.iki.fi/php-utf8/'dan dahil edilen bir dosya var. - değil karakter akışları PHP'de

<?php 
    require_once("utf8.inc"); 
    /*** create a unicode string ***/ 
    $s = "حملة إلا صلاتي"; 
    $out = utf8ToUnicode($s); 
    for ($i=0;$i < strlen($s);$i++) 
    echo dechex($out[$i])."."; 
?> 
1

Strings bytestreams şunlardır:

aşağıdaki kod benim sorun çözüldü. PHP'de gerçekten unicode dizeleri olamaz; Karakterlerinizi bazı kodlamalarla kodlamanız gerekir. Tüm unicode aralığını kapsamak istiyorsanız, UTF-8 en bariz seçenektir. Bir utf-8 kodlu Bytestream ait codepoint almak istiyorsanız

, bu kütüphaneyi kullanabilirsiniz: Ancak http://hsivonen.iki.fi/php-utf8/

, sana bu tam olarak ne gerek acaba? Büyük olasılıkla, utf-8 kullanarak tüm sıkıntılarınızı çözebilirsiniz.

+0

Merhaba arkadaşlar belirlemek için benim Arapça unicode ile mükemmel çalışır .. benim basit gereksinimi bayt akışı kod noktasını bulmak ve ben http: //hsivonen.iki kütüphanesi aracılığıyla aldım. fi/php-utf8/!! çok teşekkürler! – Orion

+0

Hala ilk etapta çözdüğünüz sorunun ne olduğunu gerçekten göremiyorum. Kendim için bir delik kazdığına eminim. – troelskn

İlgili konular