PHP : Comment détecter la direction d une chaine de caractères

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

<?php
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 :

عقول أغافكس الجيكية -> rtl
Agafix Geeky Minds -> ltr
أغافكس مشتقات من اغادير !!! -> rtl

get_direction_php
Feel free to use it, spread it or whatever :)