2009-08-29 14 views
11

Jak mogę sprawdzić, czy znak jest znakiem Unicode czy nie z PHP?Sprawdź kodowanie Unicode w PHP

+1

Możesz chcieć wyjaśnić, co dokładnie masz na myśli z Unicode w tym kontekście. Wątpię, abyś napotkał znaki nie zdefiniowane w Unicode, więc twój check może po prostu zwrócić "true" w każdym przypadku. – Joey

+0

Chcę uzyskać kod punktu charecter unicode. jak to zrobić ... – Orion

+0

@ Rössel: Wierzę, że chce wiedzieć, czy ciąg zawiera znaki inne niż ASCII. –

Odpowiedz

19

Właściwie nawet nie potrzeba rozszerzenia mb_string:

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

i znaleźć punkt kod danego znaku:

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

echo $ord[1]; 
+0

dzięki eyeze !!!! ten kod worx .... dziękuję bardzo .. – Orion

+0

@Raveesh: Jeśli moja odpowiedź rozwiązała twój problem, możesz oznaczyć go jako zaakceptowany. =) –

+0

działa idealnie z moim arabskim unicode, aby określić RTL, dzięki :) –

2

Byłbyś zwykle zrobić coś takiego:

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

Dodam: zlicza STRLEN bajtów, podczas gdy mb_strlen liczy znaków (właściwie obsługi znaków wielo-bajtowych, co chyba jest to, czego naprawdę mówimy o zamiast Unicode - Unicode obejmuje również ponad stu znaków jednobajtowych odróżnienia od ASCII)

+0

cześć searlea, dzięki za szybką reakcję! właśnie tego szukałem. – Orion

+0

Sprawdziłem to i otrzymałem wynik poniżej: "; echo strlen ($ ch). "
"; if (mb_strlen ($ ch)!= strlen ($ ch)) \t echo "Unicode"; else \t echo "Non-Unicode"; ?> jego dając wynik niż Unicode Co może być problemem? – Orion

3

można spróbować z

mb_check_encoding($s,"UTF-8") 

link

+1

Ten kod wydaje się działać! .. i będzie pomocne, jeśli możesz mi pomóc znaleźć funkcję, aby uzyskać punkt kodowy w kodzie Unicode? – Orion

+0

Niech $ s będzie "somestring", więc jeśli (mb_check_encoding ($ s, "UTF-8")) to {ciąg jest unikodem} else {to nie jest unicode} –

1

Znak Unicode będzie ZAWSZE mieć najbardziej znaczący zestaw bajtów, niezależnie od wartości znaku lub jeśli jest częścią wielobajtowej postaci Unicode lub co. Nie można po prostu sprawdzić, czy łańcuch ma więcej bajtów niż znaków, ponieważ niektóre znaki Unicode są tylko jeden bajt. Jeśli dowolny znak w wartości ciągu bajtów jest większy niż 127, ten ciąg zawiera kod Unicode.

+0

jak mogę uzyskać kod punktu o znaku Unicode ? – Orion

+0

To powinno pomóc: http://www.joelonsoftware.com/articles/Unicode.html –

1

Dzięki chłopaki .. W końcu dostałem odpowiedź, szukałem .

Masz plik włączeń od http://hsivonen.iki.fi/php-utf8/.

Poniższy kod rozwiązać mój problem:

<?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

Struny w PHP - nie są bytestreams Strumienie znakowe. W rzeczywistości nie można mieć ciągów unicode w PHP; Musisz kodować swoje znaki za pomocą kodowania. Jeśli chcesz objąć cały zakres Unicode, najbardziej oczywistym wyborem jest UTF-8.

Jeśli chcesz uzyskać kodowy o kodowanie UTF-8 bytestream, można korzystać z tej biblioteki: http://hsivonen.iki.fi/php-utf8/

Jednak zastanawiam się, co dokładnie trzeba to wszystko? Najprawdopodobniej możesz rozwiązać wszystkie swoje problemy, po prostu używając utf-8.

+0

cześć chłopaki .. moim prostym wymogiem było znalezienie kodu punktu strumienia bajtów i mam go przez bibliotekę z http: //hsivonen.iki. fi/php-utf8/!! wielkie dzięki! – Orion

+0

Nadal nie widzę, na czym polegał problem, który rozwiązywałeś. Jestem pewien, że wykopujesz sobie dziurę. – troelskn