49 votes

Suppression du HTML et des caractères spéciaux

J'aimerais utiliser une fonction php ou autre pour supprimer tout code HTML et caractères spéciaux et obtenir une sortie uniquement alphanumérique.

$des = "Hello world)<b> (*&^%$#@! it's me: and; love you.<p>";

Je veux que la sortie devienne Hello world it s me and love you (juste Aa-Zz-0-9-Espace Blanc)

J'ai essayé strip_tags mais il ne supprime que les codes HTML

$clear = strip_tags($des); 
echo $clear;

Y a-t-il un moyen de le faire ?

147voto

Mez Points 9744

C'est probablement mieux ici pour un remplacement par regex.

// Strip HTML Tags
$clear = strip_tags($des);
// Clean up things like &amp;
$clear = html_entity_decode($clear);
// Strip out any url-encoded stuff
$clear = urldecode($clear);
// Replace non-AlNum characters with space
$clear = preg_replace('/[^A-Za-z0-9]/', ' ', $clear);
// Replace Multiple spaces with single space
$clear = preg_replace('/ +/', ' ', $clear);
// Trim the string of leading/trailing space
$clear = trim($clear);

Ou, en une seule fois

$clear = trim(preg_replace('/ +/', ' ', preg_replace('/[^A-Za-z0-9 ]/', ' ', urldecode(html_entity_decode(strip_tags($des))))));

13voto

Matt Stein Points 2313

Supprimez les balises, ne laissez que les caractères alphanumériques et les espaces :

$clear = preg_replace('/[^a-zA-Z0-9\s]/', '', strip_tags($des));

Edita: tout le mérite revient à DaveRandom pour la solution parfaite...

$clear = preg_replace('/[^a-zA-Z0-9\s]/', '', strip_tags(html_entity_decode($des)));

6voto

joao_pimentel Points 556

Toutes les autres solutions sont effrayantes parce qu'elles viennent de quelqu'un qui pense avec arrogance que l'anglais est la seule langue du monde :)

Toutes ces solutions dépouillent aussi les diacritiques comme ç ou à.

La solution parfaite, comme indiqué dans Documentation PHP c'est tout simplement :

$clear = strip_tags($des);

1voto

Aditya Bhatt Points 3210

De manière plus détaillée à partir de l'exemple ci-dessus, considérant que ci-dessous est votre chaîne de caractères :

$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 minuscules), 0 à 9 et caractères. !@#$%^&*().

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

1voto

nodws Points 379

Vous pouvez le faire en une seule ligne :) spécialement utile pour les requêtes GET ou POST

$clear = preg_replace('/[^A-Za-z0-9\-]/', '', urldecode($_GET['id']));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X