Maison > Questions et réponses > le corps du texte
J'ai un problème à résoudre. Je ne peux pas utiliser preg_replace 或 str_replace
car nous ne pouvons pas prédéterminer les caractères puisque les données proviennent de la saisie d'un formulaire.
J'ai essayé de supprimer ces caractères de ceci $name "Test ½ ´ ¤ £ € ¨"
½ ´ ¤ £ € ¨;
Il en va de même pour le front-end, les caractères ne peuvent pas être prédéterminés
J'ai essayé les méthodes ci-dessous mais aucune n'a fonctionné
$name = "Test ½ ´ ¤ £ € ¨"; mb_convert_encoding(strval($name); utf8_decode(strval($name);
Mon résultat idéal est Test
P粉7318612412023-09-13 15:38:26
Vous pouvez toujours parcourir les caractères d'une chaîne. Mais attention : PHP ne supporte pas nativement Unicode.
$remove = array( '½', '´', '¤', '£', '€' ); $result = ''; $name = "Test ½ ´ ¤ £ € ¨"; $count = mb_strlen($name, 'UTF-8'); for( $i = 0; $i < $count; $i++ ){ $char = mb_substr( $name, $i, 1, 'UTF-8' ); if( ! in_array( $char, $remove ) { $result .= $char; } }
Cela parcourt les caractères multi-octets dans une chaîne fournie par l'utilisateur et vous permet d'en faire ce que vous voulez. L'exemple construit une chaîne résultante, en omettant les caractères que vous avez mentionnés. (Pas débogué, désolé.)
(À mon humble avis, je pense que vos raisons pour éviter les fonctions de remplacement de chaîne sont probablement fausses. L'avantage de l'utilisation de classes de caractères regex est le suivant : les auteurs de regex ont résolu de nombreux cas étranges dans lesquels Unicode inclut de nombreuses situations qui mettent les gens mal à l'aise)
.