Question

J'ai une base de données MySQL avec des titres de livres en anglais et en arabe et j'utilise un classe PHP capable de translittérer automatiquement le texte arabe en script latin.

Je voudrais que mon HTML de sortie ressemble à ceci:

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

Existe-t-il un moyen pour PHP de déterminer la langue d'une chaîne en fonction des caractères Unicode et des glyphes utilisés? J'essaie d'obtenir quelque chose comme ça:

$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>";
    }
    ...
}

Heureusement, la classe n’étouffe pas quand elle utilise des caractères latins. Je peux donc théoriquement envoyer chaque résultat à travers la transformation, mais cela semble être un gaspillage de traitement.

Merci!

Modifier: Je n'ai toujours pas trouvé de moyen de vérifier les glyphes ou les caractères. Je suppose que je pourrais mettre tous les caractères arabes dans un tableau et vérifier si quelque chose dans le tableau correspond à une partie de la chaîne ...

Cependant, j’ai trouvé une solution provisoire qui pourrait bien fonctionner à la fin. Il fait passer chaque titre à travers la transformation, quelle que soit la langue, mais ne génère la translittération entre parenthèses que si la chaîne a été modifiée:

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>";
}
Était-ce utile?

La solution

Cela devrait le faire:

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

Vous pouvez rendre cette expression régulière un peu plus sophistiquée si vous le souhaitez, mais je ne pense pas que vous ayez vraiment besoin de le faire.

Le \ p La séquence d'échappement vous permet de sélectionner des caractères en fonction de leurs propriétés Unicode (lorsque le u modificateur de motif est utilisé).

Le manuel PHP mentionne: "Propriétés étendues telles que" Grec " ou "InMusicalSymbols". ne sont pas pris en charge par PCRE. " Mais ce n'est plus tout à fait vrai. La version PCRE 6.5 prend désormais en charge les noms de script .

Autres conseils

Voici une classe PHP open source pour la détection automatique des jeux de caractères arabes:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top