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 '
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);
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
À première vue, je pense que la fonction addlashes pourrait être un point de départ. http://php.net/manual/en/function.addslashes.php
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.