2009-08-05 7 views

Répondre

4

Vous pouvez utiliser strip_tags et preg_replace pour y parvenir:

function clean($in) 
{ 
    // Remove HTML 
    $out = strip_tags($in); 
    // Filter all other characters 
    return preg_replace("/[^a-z]+/i", "", $out); 
} 

[^a-z] correspondra à un caractère autre que A à Z, le signe + précise qu'il doit correspondre à une longueur de la séquence de ces caractères et le /i -modifier indique qu'il s'agit d'une recherche insensible à la casse. Tous les caractères correspondants seront remplacés par une chaîne vide ne laissant que les caractères restants.

Si vous souhaitez conserver des espaces, vous pouvez utiliser [^a-z ] à la place et si vous souhaitez conserver les numéros [^a-z0-9 ]. Cela vous permet de mettre en liste blanche tous les caractères autorisés et de rejeter le reste.

+0

Alors que répond à la question dans le titre, il ne supprime pas les balises html, que le corps suggère qu'il veut enlever ... – Stobor

+0

True. Voir la réponse de Jeremys aussi. –

2

Utilisez d'abord strip_tags() pour vous débarrasser du code HTML, puis utilisez l'expression rationnelle d'Emil H.

+0

+1. Manqué celui-là. Bien sûr. –

2

Prepend un

$in = preg_replace("/<[^>]*>/", "", $in); 

à la solution de Emil H, de sorte que vos balises se rayé. Sinon, un « <p> Bonjour tout le monde </p > » apparaît comme « pHelloWorldp »

Questions connexes