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>";
}
È stato utile?

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:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top