Pregunta

Tengo una base de datos MySQL con títulos de libros en inglés y árabe y estoy usando un clase PHP que puede transcribir automáticamente el texto árabe en escritura latina.

Me gustaría que mi HTML de salida se vea así:

<h3>A book</h3>
<h3>كتاب <em>(kitaab)</em></h3>
<h3>Another book</h3>

¿Hay alguna manera para que PHP determine el lenguaje de una cadena en función de los caracteres Unicode y los glifos utilizados en ella? Estoy tratando de obtener algo como esto:

$Ar = new Arabic('EnTransliteration');
while ($item = mysql_fetch_array($results)) {
    ...
    if (some test to see if $item['item_title'] has Arabic glyphs in it) {
      echo "<h3>$item[item_title] <em>(" . $Ar->ar2en($item['item_title']) . ")</em></h3>";
    } else {
      echo "<h3>$item[item_title]</h3>";
    }
    ...
}

Afortunadamente, la clase no se ahoga cuando se alimentan caracteres latinos, por lo que en teoría podría enviar todos los resultados a través de la transformación, pero eso parece una pérdida de procesamiento.

¡Gracias!

Editar: Todavía no he encontrado una manera de verificar glifos o caracteres. Supongo que podría poner todos los caracteres árabes en una matriz y verificar si algo en la matriz coincide con una parte de la cadena ...

Sin embargo, descubrí una solución provisional que podría funcionar bien al final. Pone a cada título a través de la transformación independientemente del idioma, pero solo genera la transliteración entre paréntesis si se cambió la cadena:

while ($item = mysql_fetch_array($mysql_results)) {
    $transliterate = trim(strtolower($Ar->ar2en($item['item_title'])));
    $item_title = (strtolower($item['item_title']) == $transliterate) ? $item['item_title'] : $item['item_title'] . " <em>($transliterate)</em>";

    echo "<h3>$item_title</h3>";
}
¿Fue útil?

Solución

Esto debería hacerlo:

preg_match("/\p{Arabic}/u", $item['item_title'])

Podrías hacer que esa expresión regular sea un poco más sofisticada si quieres, pero no creo que realmente necesites hacerlo.

El \ p secuencia de escape le permite seleccionar caracteres en función de sus propiedades Unicode (cuando el se utiliza u modificador de patrón ).

El manual de PHP menciona: "Propiedades extendidas como" Griego " o " InMusicalSymbols " no son compatibles con PCRE. " Pero eso ya no es del todo cierto. PCRE versión 6.5 agregó soporte para nombres de script .

Otros consejos

Aquí hay una clase de código abierto PHP para la detección automática de juegos de caracteres árabes:

http://www.ar-php.com/php /arabic/index.html#ArCharsetD

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top