PHP : Comment détecter la direction d une chaine de caractères
Posted by Fayçal on Oct 16th, 2009 in Computers, Web & Design
J’ai essayé un samedi soir de trouver une solution automatique pour adopter la direction WordPress avec la langue du post utilisée… malheureusement je me suis heurté à plein d’obstacles et il était obligatoire de faire des changement dans le thème utilisé pour avoir le bon affichage.
Avec cette intervention humaine, j’ai perdu l’intérêt principal de mon plugin (le fait d’automatiser la procédure) et j’ai laisser tomber sa mise à jour (une solution basée sur les custom fields + petite modif dans le thème est nettement meilleure à mon avis).
Pour que ma recherche ne soit pas totalement inutile, voila au moins la fonction PHP principale sur la quelle le plugin se base.
C’est une synthèse d’une recherche infernale sur Google et j’espère via ce poste qu’elle soit mieux référencée au cas où une autre personne aura le même besoin
function getDirection($content) {
$ltrCharchters = ‘A-Za-z\x{00C0}-\x{00D6}\x{00D8}-\x{00F6}\x{00F8}-\x{02B8}\x{0300}-\x{0590}\x{0800}-\x{1FFF}\x{2C00}-\x{FB1C}\x{FDFE}-\x{FE6F}\x{FEFD}-\x{FFFF}’;
$rtlCharchters = ‘\x{0591}-\x{07FF}\x{FB1D}-\x{FDFD}\x{FE70}-\x{FEFC}’;
$pMarks = ‘\p{P}’;
$space = ‘\s’;
if (!preg_match("/[^".$space.$pMarks.$rtlCharchters."]/u" , $content)) {
return ‘rtl’ ;
} elseif (!preg_match("/[^".$space.$pMarks.$ltrCharchters."]/u" , $content)) {
return ‘ltr’;
} else {
return ’0 ‘;
}
}
$test1 = "عقول أغافكس الجيكية";
$test2 = "Agafix Geeky Minds";
$test3 = "أغافكس مشتقات من اغادير !!!";
echo $test1 . " -> ".getDirection($test1)."\n";
echo $test2 . " -> ".getDirection($test2)."\n";
echo $test3 . " -> ".getDirection($test3)."\n";
?>
Ce code donne comme résultat :
Agafix Geeky Minds -> ltr
أغافكس مشتقات من اغادير !!! -> rtl








Oct 20th