64 votes

Comment supprimer les caractères spéciaux de html ?

Je suis en train de créer un fichier de flux RSS pour mon application, dans lequel je veux supprimer les balises HTML, ce qui est fait en strip_tags . Mais strip_tags ne supprime pas les caractères de code spécial HTML :

  & © 

etc.

Veuillez m'indiquer une fonction que je peux utiliser pour supprimer ces caractères de code spéciaux de ma chaîne.

123voto

schnaader Points 26212

Soit vous les décodez en utilisant html_entity_decode ou les supprimer en utilisant preg_replace :

$Content = preg_replace("/&#?[a-z0-9]+;/i","",$Content); 

(De aquí )

EDIT : Alternative selon le commentaire de Jacco

ce serait bien de remplacer le '+' par {2,8} ou autre. Cela limitera le risque de remplacer des phrases entières phrases entières lorsqu'un "&" non codé est présent.

$Content = preg_replace("/&#?[a-z0-9]{2,8};/i","",$Content);

6 votes

Il serait peut-être bon de remplacer le '+' par '{2,8] ou quelque chose comme ça. Cela limitera le risque de remplacer des phrases entières lorsqu'un "&" non codé est présent.

0 votes

Merci, j'ai ajouté votre commentaire et une version alternative à la réponse.

0 votes

J'ai fait une faute de frappe : ça devrait être {2,8}, désolé.

21voto

andi Points 5372

Utilisez html_entity_decode pour convertir les entités HTML.

Vous devrez définir le jeu de caractères pour qu'il fonctionne correctement.

1 votes

C'est plus correct car lorsque nous remplaçons &nbsp ; par une chaîne vide, nous obtenons un résultat incorrect - tous les espaces non cassables sont écrasés.

2 votes

Ceci ! Tout ce dont vous avez besoin est d'exécuter le html_entity_decode sur la chaîne et ensuite utiliser strip_tags et enfin, utilisez filter_var($string, FILTER_SANITIZE_STRING) .

18voto

gpkamp Points 93

En plus des bonnes réponses ci-dessus, PHP a aussi une fonction de filtrage intégrée qui est très utile : filter-var.

Pour supprimer les caractères HMTL, utilisez :

$cleanString = filter_var($dirtyString, FILTER_SANITIZE_STRING);

Plus d'informations :

  1. fonction.filtre-var
  2. Filtre_sanitaire_chaîne

1 votes

Je sais que le fil est un peu vieux, mais je cherche à résoudre le même problème... Malheureusement, filter_var nécessite la version 5.2 ou une version plus récente... Sinon, ce serait la réponse (du moins à mon problème spécifique). Merci.

10voto

0xFF Points 2047

Vous pouvez jeter un coup d'oeil à htmlentities() et html_entity_decode(). aquí

$orig = "I'll \"walk\" the <b>dog</b> now";

$a = htmlentities($orig);

$b = html_entity_decode($a);

echo $a; // I'll &quot;walk&quot; the &lt;b&gt;dog&lt;/b&gt; now

echo $b; // I'll "walk" the <b>dog</b> now

4voto

Vineet Kadkol Points 324

Cela pourrait bien fonctionner pour supprimer les caractères spéciaux.

$modifiedString = preg_replace("/[^a-zA-Z0-9_.-\s]/", "", $content);

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