[PHP] PHP preg_match ne fonctionne pas sans aucune raison ? Fustigez UTF-16.
Récemment, j’ai tenté de remplacé des tabulation dans un document, et j’ai été surpris quand ma simple expression régulière,
/\t+/ne trouvait pas un ensemble de tabulations alors que Sublime Text réalisait facilement l’opération avec la même expression.
Il apparaît en fait que le document a été encodé en UTF-16 et que ceci n’est pas supporté par la fonction PHP preg_*. UTF-16 ajout un octet NULL (\0) après chaque caractère ASCII qui casse l’expression régulière.
Tout ce que vous avez donc à faire pour que ça fonctionne est de convertir votre chaîne de caractères en UTF-8 avant d’exécuter votre expression régulière. :
$string = mb_convert_encoding($raw_string, 'UTF-8', 'UTF-16');
$string = preg_replace('/\t+/', "\t", $string); //Replaces multiple tabs with a single tabCeci est notamment valable lors de l’export de certains résultats par PowerShell sous Windows.
Accueil > Linux > Développement > [PHP] PHP preg_match ne fonctionne pas sans aucune raison ? Fustigez UTF-16.