2009-08-29 23 views
11

¿Cómo puedo comprobar si un carácter es un carácter Unicode o no con PHP?Comprobar unicode en PHP

+1

Quizás desee aclarar qué quiere decir exactamente con Unicode en este contexto. Dudo que encuentres caracteres no definidos en Unicode, por lo que tu cheque podría simplemente devolver 'verdadero' en todos los casos. – Joey

+0

quiero obtener el punto de código de un charecter unicode. cómo se puede hacer. – Orion

+0

@ Rössel: Creo que quiere saber si una cadena contiene caracteres distintos de ASCII. –

Respuesta

19

En realidad, usted ni siquiera necesita la extensión mb_string:

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

y para encontrar el punto de un carácter determinado código:

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

echo $ord[1]; 
+0

thanks eyeze !!!! este código worx .... muchas gracias .. – Orion

+0

@Raveesh: Si mi respuesta resolvió su problema, puede marcarlo como aceptado. =) –

+0

funciona perfectamente con mi Unicode Árabe para determinar RTL, Gracias :) –

2

Te sueles hacer algo como:

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

debo añadir: cuenta las strlen bytes, mientras que mb_strlen cuenta caracteres (manejo apropiado de caracteres de varios bytes, que supongo que es lo que realmente está hablando en lugar de unicode - unicode como también cubre más de cien caracteres de un solo byte indistinguibles de ASCII)

+0

hola searlea, gracias por su rápida respuesta! Esto es exactamente lo que estaba buscando. – Orion

+0

ive comprobé esto y obtuve el resultado siguiente "; echo strlen ($ ch). "
"; if (mb_strlen ($ ch)!= strlen ($ ch)) \t echo "Unicode"; else \t echo "No Unicode"; ?> su dando el resultado no Unicode lo que podría ser el problema? – Orion

3

se puede tratar con

mb_check_encoding($s,"UTF-8") 

link

+1

¡Este código parece funcionar! ... y sería útil si pudiera ayudarme a encontrar una función para obtener el punto de código de un carácter unicode? – Orion

+0

vamos a $ s ser "somestring", entonces si (mb_check_encoding ($ s, "UTF-8")) entonces {la cadena es unicode} else {no es unicode} –

1

Un caracter unicode SIEMPRE tendrá el conjunto de bytes más significativo sin importar el valor del carácter o si es parte de un carácter unicode de múltiples bytes o qué. No puede simplemente verificar si la cadena tiene más bytes que caracteres, ya que algunos caracteres Unicode son solo de un byte. Si cualquier carácter en el valor de un byte de cadena es mayor que 127, esa cadena contiene unicode.

+0

¿cómo puedo obtener el punto de código de un unicode char ? – Orion

+0

Esto debería ayudar: http://www.joelonsoftware.com/articles/Unicode.html –

1

Gracias chicos .. Finalmente me dieron la respuesta i estaba buscando .

Tengo un archivo de inclusión en http://hsivonen.iki.fi/php-utf8/.

El siguiente código resuelto mi problema:

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

cadenas en PHP son bytestreams - no streams de caracteres. En realidad no puedes tener cadenas unicode en PHP; Necesitas codificar tus personajes con alguna codificación. Si desea cubrir todo el rango de Unicode, UTF-8 es la opción más obvia.

Si usted desea conseguir el punto de código de una corriente de bytes codificados UTF-8, puede utilizar esta biblioteca: http://hsivonen.iki.fi/php-utf8/

Sin embargo, me pregunto qué es exactamente lo que necesita esto? Lo más probable es que puedas resolver todos tus problemas simplemente usando utf-8.

+0

Hola chicos ... Mi simple requerimiento era encontrar el código de la secuencia de bytes y lo obtuve a través de la biblioteca de http: //hsivonen.iki. fi/php-utf8/!! muchas gracias! – Orion

+0

Todavía no veo realmente cuál fue el problema que estabas resolviendo en primer lugar. Estoy bastante seguro de que estás cavando un agujero para ti. – troelskn

Cuestiones relacionadas