Verifique el idioma de la cadena basada en glifos en PHP
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>";
}
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: