Suppression des caractères de contrôle des chaînes PHP
Q : Modification de l'expression régulière pour la suppression des caractères de contrôle
Un développeur PHP a déjà utilisé l'expression suivante pour purger les caractères de contrôle comme STX d'une chaîne :
preg_replace("/[^a-zA-Z0-9 .\-_;!:?äÄöÖüÜß<>='\"]/","",$pString)
Cependant, le résultat était trop restrictif, soulevant la question : comment supprimer sélectivement les caractères de contrôle ?
A : Utilisation de classes de caractères spécifiques pour l'identification des personnages de contrôle
Pour cibler précisément les personnages de contrôle, une classe de caractères plus spécifique peut être utilisée :
preg_replace('/[\x00-\x1F\x7F]/', '', $input);
Cette expression fait correspondre les caractères avec des codes ASCII compris dans la plage x00-x1F et x7F, englobant les 32 premiers caractères, et x7F, qui inclut des caractères tels que les retours chariot.
Préservation des caractères essentiels tels que les sauts de ligne
Si des caractères spécifiques, tels que les sauts de ligne ou les retours chariot, doivent être conservés, leurs séquences d'échappement peuvent être exclues :
preg_replace('/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F]/', '', $input);
Dans cette expression modifiée, x0A (saut de ligne) et x0D (retour chariot) sont exclus de la classe de caractères.
Syntaxe moderne et dépréciation
Il est crucial de noter que la dépréciation de ereg_replace dans PHP 5.3.0 et son la suppression ultérieure dans PHP 7.0.0 impose l'utilisation de preg_replace sur ereg_replace.
Enfin, une classe de caractères pour les caractères de contrôle
Pour une alternative concise et portable, la classe de caractères [:cntrl:] peut être employé :
preg_replace('/[[:cntrl:]]/', '', $input);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!