2009-04-17 10 views
9

Avant de commencer, strip_tags() ne fonctionne pas.php regex pour supprimer HTML

maintenant,

J'ai des données qui doivent être analysés, le problème est, je dois me débarrasser de tout le code HTML qui a été très étrangement formated. les balises ressemblent à ceci: (avis espaces)

<p> blah blah blah </p > < a href= " link.html " > blah blah blah </a> 

Tous les regexs J'ai essayé ne fonctionnent pas, et je ne sais pas assez sur regex formattage pour les faire fonctionner. Je ne me soucie pas de préserver quoi que ce soit à l'intérieur des balises, et je préférerais me débarrasser du texte à l'intérieur d'un lien si je le pouvais.

Quelqu'un a une idée?

(je dois vraiment me asseoir et d'apprendre des expressions régulières une journée)

Répondre

26

Est-ce que

preg_replace('/<[^>]*>/', '', $content) 

travail?

+1

Au lieu de '*' vous pouvez utiliser '+', car avec '*' vous aussi remplacer '<>' si trouvé dans le texte. – machineaddict

2

Solution qui est pas infaillible, mais travailler pour ce que vous avez publié:

s/<[^>]*>//g 
1

Formaté étrangement? C'est un code HTML valide, n'est-ce pas? Dans ce cas, je ne le toucherais pas avec des expressions régulières. Des exemples de comment cela peut aller mal et pourquoi c'est une mauvaise idée sont légion. J'utiliserais plutôt HTML Tidy pour, par exemple, nettoyer l'espace blanc inutile.

+0

J'allais publier ceci, mais j'étais trop fatigué pour le dire intelligiblement. +1 – strager

+0

Lorsque j'exécute la chaîne via HTML Tidy, les signes < and > sont remplacés par < and > afin que strip_tags() ne fonctionne toujours pas. J'utilisais à la fois tidy_parse_string() et tidy_repair_string(). Y at-il une autre fonction qui fonctionnera que je ne vois pas? – Me1000

-2

http://ca3.php.net/strip_tags est probablement ce dont vous avez besoin.

+0

strip_tags() ne fonctionne pas (comme indiqué par la première ligne de ma question) parce que PHP ne reconnaît pas les balises en HTML en raison de la mise en forme. C'était aussi ma première pensée. – Me1000

-2

Faites-le moi savoir.

<?php 
$text = '<p> blah blah blah </p > < a href= " link.html " > blah blah blah</a>'; 
echo strip_tags($text); 
echo "\n"; 
echo strip_tags($text, '<p><a>'); 
?> 
+0

strip_tags() ne fonctionne pas (comme indiqué par la première ligne de ma question) car PHP ne reconnaît pas les balises en HTML. C'était aussi ma première pensée. – Me1000

+0

L'avez-vous ajouté plus tard? J'ai complètement raté ça ... Avez-vous essayé d'utiliser preg_replace? –

+0

non, le message n'a pas été édité du tout. Je posais des questions sur l'expression rationnelle que je pouvais utiliser. La réponse du chaos est probablement celle que je vais utiliser, mais si je pouvais utiliser le html pour nettoyer le code, alors utilisez strip_tags, mais je ne trouve pas de fonction dans le html qui fasse ce dont j'ai besoin ; c'est pourquoi je n'ai pas vérifié la réponse du chaos. :) – Me1000

12

strip_tags() fonctionnera si vous utilisez html_entity_decode() sur une variable avant strip_tags()

<?php 
$text = '<p> blah blah blah </p > < a href= " link.html " > blah blah blah</a>'; 
echo strip_tags(html_entity_decode($text)); 
?> 
+0

cela devrait être la réponse acceptée .. – dendini

+0

Pourquoi 'html_entity_decode' est nécessaire? – alex