web-dev-qa-db-fra.com

PHP supprime le caractère spécial de la chaîne

J'ai des problèmes avec la suppression de caractères spéciaux. Je souhaite supprimer tous les caractères spéciaux à l'exception de "() /.% - &", car je définis cette chaîne comme titre.

J'ai édité le code de l'original (regardez ci-dessous):

preg_replace('/[^a-zA-Z0-9_ -%][().][\/]/s', '', $String);

Mais cela ne fonctionne pas pour supprimer des caractères spéciaux tels que: "", "", "", entre autres.

code d'origine: (cela fonctionne mais il supprime ces caractères: "() /.% - &")

preg_replace('/[^a-zA-Z0-9_ -]/s', '', $String);
29
user453089

Votre point correspond à tous les caractères. Échappez-lui (et les autres caractères spéciaux), comme ceci:

preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $String);
52
Luke Sneeringer
preg_replace('#[^\w()/.%\-&]#',"",$string);
13
Thomas Hupkens

Bon essai! Je pense qu'il suffit de faire quelques petits changements:

  • Échappez aux crochets ([ et ]) à l'intérieur de la classe de caractères (qui sont également indiqués par [ et ])
  • Échapper au caractère d'échappement (\) lui-même
  • De plus, il y a une bizarrerie où - est spécial: s'il est entre deux caractères, cela signifie une plage, mais si c'est au début ou à la fin, cela signifie le littéral - personnage.

Vous voudrez quelque chose comme ça:

preg_replace('/[^a-zA-Z0-9_%\[().\]\\/-]/s', '', $String);

Voir http://docs.activestate.com/activeperl/5.10/lib/pods/perlrecharclass.html#special_characters_inside_a_bracketed_character_class si vous souhaitez en savoir plus sur ce sujet.

5
Anonymoose

Vous voulez remplacer str , car en termes de performances, c'est beaucoup moins cher et correspond toujours à vos besoins!

$title = str_replace( array( '\'', '"', ',' , ';', '<', '>' ), ' ', $rawtitle);

(À moins qu'il ne s'agisse de sécurité et d'injection SQL, dans ce cas, je préfère aller avec une liste POSITIVE de caractères AUTORISÉS ... encore mieux, respectez les routines testées et éprouvées.)

Btw, puisque l'OP a parlé de la définition du titre: je ne remplacerais pas les caractères spéciaux par rien, mais par un espace. Un espace superficieux est moins gênant que deux mots collés l'un à l'autre ...

4
Frank Nocke
<?php
$string = '`~!@#$%^&^&*()_+{}[]|\/;:"< >,.?-<h1>You .</h1><p> text</p>'."'";
$string=strip_tags($string,"");
$string = preg_replace('/[^A-Za-z0-9\s.\s-]/','',$string); 
echo $string = str_replace( array( '-', '.' ), '', $string);
?>
2
dinhhiepdung
mysqli_set_charset($con,"utf8");
$title = ' LEVEL – EXTENDED'; 
$newtitle = preg_replace('/[^(\x20-\x7F)]*/','', $title);     
echo $newtitle;

Result :  LEVEL EXTENDED

De nombreux caractères étranges peuvent être supprimés en appliquant ci-dessous le code de connexion mysql. mais dans certaines circonstances, si vous supprimez ce type de caractère étrange comme "vous pouvez utiliser le format preg_replace ci-dessus.

0
Solomon
preg_replace('/[^a-zA-Z0-9_ \-()\/%-&]/s', '', $String);
0
Alex