4 Stimmen

Überprüfen Sie die Sprache des Strings basierend auf Glyphen in PHP

Ich habe eine MySQL-Datenbank mit Buchtiteln sowohl in Englisch als auch in Arabisch und verwende eine PHP-Klasse, die arabischen Text automatisch in lateinische Schrift umwandeln kann.

Ich möchte, dass mein Ausgabe-HTML ungefähr so aussieht:

Ein Buch
 (kitaab)
Ein weiteres Buch

Gibt es einen Weg für PHP, die Sprache eines Strings anhand der Unicode-Zeichen und Glyphen, die darin verwendet werden, zu bestimmen? Ich versuche etwas wie das zu bekommen:

$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 "$item[item_title] (" . $Ar->ar2en($item['item_title']) . ")";
    } else {
      echo "$item[item_title]";
    }
    ...
}

Zum Glück blockiert die Klasse nicht, wenn sie mit lateinischen Zeichen gefüttert wird, also könnte ich theoretisch jedes Ergebnis durch die Transformation schicken, aber das scheint wie eine Verschwendung von Ressourcen.

Danke!

Bearbeitung: Ich habe immer noch keinen Weg gefunden, um nach Glyphen oder Zeichen zu suchen. Ich könnte alle arabischen Zeichen in ein Array packen und prüfen, ob etwas im Array mit einem Teil des Strings übereinstimmt...

Ich habe jedoch eine Übergangslösung gefunden, die am Ende gut funktionieren könnte. Sie durchläuft jeden Titel durch die Transformation, unabhängig von der Sprache, gibt jedoch nur die klammernde Transliteration aus, wenn der String geändert wurde:

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'] . " ($transliterate)";

    echo "$item_title";
}

6voto

mercator Punkte 27618

Dies sollte es tun:

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

Sie könnten diesen regulären Ausdruck etwas anspruchsvoller gestalten, wenn Sie möchten, aber ich glaube nicht, dass Sie das wirklich müssen.

Das \p Escape-Sequenz ermöglicht es Ihnen, Zeichen basierend auf ihren Unicode-Eigenschaften auszuwählen (wenn der u Mustermodifikator verwendet wird).

Im PHP-Handbuch heißt es: "Erweiterte Eigenschaften wie "Griechisch" oder "InMusicalSymbols" werden von PCRE nicht unterstützt". Aber das stimmt nicht mehr ganz. PCRE-Version 6.5 fügte Unterstützung für Skriptnamen hinzu.

0voto

karim79 Punkte 333786

Hier ist eine PHP Open-Source-Klasse zur automatischen Erkennung des arabischen Zeichensatzes:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X