La gestion des chaînes multilingues en PHP est une tâche courante, en particulier lorsqu'il est nécessaire de prendre en charge les langues de droite à gauche (RTL) telles que l'hébreu. PHP fournit la fonction Hebrev () pour convertir le texte hébreu dans l'ordre logique en ordre visuel pour un affichage correct dans des environnements qui ne prennent pas en charge RTL. Cependant, dans une utilisation réelle, cette fonction se traduit souvent par des exceptions de sortie en raison d'un codage de caractères incohérent. Cet article analysera les causes profondes de ce problème et fournira des solutions fiables.
La syntaxe de Hebrev () est la suivante:
<code> String hebrev (String $ hebrew_text [, int $ max_chars_per_line = 0]) </code>Il essaiera de convertir l'ordre logique (de droite à gauche) à l'ordre visuel (de gauche à droite) pour mieux afficher le texte sur les systèmes ou les terminaux hérités qui ne prennent pas en charge RTL.
Par exemple:
<code> echo hebrev ("Á? ìù ì ??? é"); // Sortir: ??????? ???? </code>Dans cet exemple, si le codage du caractère est correctement traité, la sortie d'ordre visuel attendu du texte hébreu est obtenue.
Hebrev () est essentiellement conçu sur la base du jeu de caractères ISO-8859-8, un codage à un octet utilisé en hébreu. Par conséquent, si vous passez une chaîne codée UTF-8, il ne sera pas en mesure d'identifier et de convertir correctement ces caractères, entraînant un code brouillé, un ordre désordonné ou même perdre des caractères directement.
Les sorties d'exception courantes comprennent:
Les personnages non-hébreux sont tronqués ou remplacés par des points d'interrogation
L'ordre de sortie est toujours incorrect
Des conflits surviennent lorsqu'ils sont mélangés avec d'autres fonctions (comme la série MB_ * )
Pour s'assurer que Hebrev () fonctionne correctement, il est recommandé de convertir le texte d'entrée de l'UTF-8 en ISO-8859-8 avant de l'appeler. Vous pouvez utiliser la fonction ICONV () intégrée de PHP:
<code> $ utf8_text = "????????"; $ iso_text = iconv ("utf-8", "iso-8859-8", $ utf8_text); $ converti = hebrev ($ iso_text); Echo Iconv ("ISO-8859-8", "UTF-8", $ converti); </code>Ce processus est le suivant:
Convertir la chaîne UTF-8 d'origine en ISO-8859-8
Utilisez Hebrev () pour convertir l'ordre visuel
Retour à UTF-8 pour une sortie ou un traitement ultérieur
Voici un script PHP complet qui reçoit une entrée de texte hébreu des utilisateurs et est traité en toute sécurité par Hebrev () après la sortie:
<code> & lt ;? php if ($ _server ['request_method'] === 'post') {$ input = $ _post ['hebrew_text'] ?? ''; $ iso_input = iconv ("utf-8", "iso-8859-8", $ entrée); $ hebrev_output = hebrev ($ iso_input); $ utf8_output = iconv ("ISO-8859-8", "UTF-8", $ hebrev_output); echo "& lt; pre & gt;" . htmlSpecialChars ($ utf8_output, ent_quotes, 'utf-8'). "& lt; / pre & gt;"; }? & gt; <form méthode = "post" action = " https://gitbox.net/convert.php ">
<bétique> Entrez le texte hébraïque: </ label> <br>
<textarea name = "hebrew_text" rows = "4" cols = "50"> </ textarea> <br>
<input type = "soumi" value = "convert">
</ form>
</code>
Bien que Hebrev () soit toujours utile dans certains systèmes hérités, il est recommandé d'utiliser des dispositions CSS et HTML compatibles RTL pour afficher correctement le contenu hébreu dans les applications modernes. Par exemple:
<code> & lt; div dir = "rtl" & gt; ?????? ??? & lt; / div & gt; </code>De plus, si un traitement de texte bidirectionnel complexe est requis, envisagez d'utiliser des bibliothèques internationales plus professionnelles (telles que les USI) ou des capacités de rendu client avec JavaScript.
Les problèmes d'encodage des personnages sont l'obstacle le plus courant lors de l'utilisation de Hebrev () pour traiter le texte hébreu. En convertissant raisonnablement entre UTF-8 et ISO-8859-8, la compatibilité des fonctions et l'exactitude de la sortie peuvent être considérablement améliorées. Mais à long terme, les dispositions plus modernes et les solutions internationales sont la direction du développement durable.