web-dev-qa-db-fra.com

Suppression de caractères spéciaux de la chaîne

J'utilise une fonction pour supprimer les caractères spéciaux des chaînes.

function clean($string) {
   $string = str_replace('', '-', $string); // Replaces all spaces with hyphens.
   return preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.
}

Et voici le cas de test

echo clean('a|"bc!@£de^&$f g');
Will output: abcdef-g

avec référence de SO Answer. Le problème est que si 'est le dernier caractère de ma chaîne, comme je reçois une chaîne America' à partir d'un fichier Excel, si je mets ça dans cette fonction, ça n'échappera pas ' .Toute aide lorsque le premier et le dernier caractère est '

11
user1765876

essayez de remplacer le changement d'attente normal

preg_replace('/[^A-Za-z0-9\-]/', '', $string);

avec

preg_replace("/[^A-Za-z0-9\-\']/", '', $string);  // escape apostraphe

ou

vous pouvez str_replace C'est plus rapide et plus facile que preg_replace () Parce qu'il n'utilise pas d'expressions régulières.

$text = str_replace("'", '', $string);
14
user2092317

De manière plus détaillée à partir de l'exemple ci-dessus, vous trouverez ci-dessous votre chaîne:

$string = '<div>This..</div> <a>is<a/> <strong>hello</strong> <i>world</i> ! هذا هو مرحبا العالم! !@#$%^&&**(*)<>?:";p[]"/.,\|`~1@#$%^&^&*(()908978867564564534423412313`1`` "Arabic Text نص عربي test 123 و,.m,............ ~~~ ٍ،]ٍْ}~ِ]ٍ}"; ';

Code:

echo preg_replace('/[^A-Za-z0-9 !@#$%^&*().]/u','', strip_tags($string));

Allows: Lettres anglaises (majuscules et petites), 0 à 9 et caractères !@#$%^&*().

Removes: Toutes les balises html et les caractères spéciaux autres que ci-dessus

6
Aditya P Bhatt

À première vue, je pense que la fonction addlashes pourrait être un point de départ. http://php.net/manual/en/function.addslashes.php

0
user2864030

Certainement un meilleur modèle, mais cela devrait fonctionner pour toute la chaîne:

preg_replace("/^'|[^A-Za-z0-9\'-]|'$/", '', $string);

Si vous devez les remplacer par des mots dans la chaîne, vous devrez utiliser\b pour les limites de Word. De plus, si vous souhaitez remplacer des multiples au début ou à la fin, vous devrez ajouter un + à ceux-ci.

0
AbraCadaver