Controlla la lingua della stringa in base ai glifi in PHP
Domanda
Ho un database MySQL con titoli di libri sia in inglese che in arabo e sto usando un classe PHP che può traslitterare automaticamente il testo arabo in caratteri latini.
Vorrei che il mio HTML di output fosse simile a questo:
<h3>A book</h3>
<h3>كتاب <em>(kitaab)</em></h3>
<h3>Another book</h3>
Esiste un modo per PHP di determinare la lingua di una stringa in base ai caratteri Unicode e ai glifi utilizzati in essa? Sto cercando di ottenere qualcosa del genere:
$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>";
}
...
}
Fortunatamente la classe non si strozza quando viene nutrita con caratteri latini, quindi in teoria ho potuto inviare tutti i risultati attraverso la trasformazione, ma sembra uno spreco di elaborazione.
Grazie!
Modifica Non ho ancora trovato un modo per controllare glifi o caratteri. Suppongo di poter mettere tutti i caratteri arabi in un array e verificare se qualcosa nell'array corrisponde a una parte della stringa ...
Tuttavia, ho trovato una soluzione provvisoria che alla fine avrebbe funzionato bene. Mette tutti i titoli attraverso la trasformazione indipendentemente dalla lingua, ma genera la traslitterazione tra parentesi solo se la stringa è stata cambiata:
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>";
}
Soluzione
Questo dovrebbe farlo:
preg_match("/\p{Arabic}/u", $item['item_title'])
Potresti rendere quell'espressione regolare un po 'più sofisticata se vuoi, ma non credo che tu debba davvero farlo.
Il \ p
sequenza di escape ti consente di selezionare i caratteri in base alle loro proprietà Unicode (quando u
modificatore di pattern viene utilizzato).
Il manuale di PHP menziona: "Proprietà estese come" Greco " o " InMusicalSymbols " non sono supportati da PCRE. " Ma non è più del tutto vero. PCRE versione 6.5 ha aggiunto il supporto per i nomi degli script .
Altri suggerimenti
Ecco una classe open source PHP per il rilevamento automatico del set di caratteri arabi: