php正则表达式删除HTML

Posted

技术标签:

【中文标题】php正则表达式删除HTML【英文标题】:php regex to remove HTML 【发布时间】:2010-10-20 00:25:18 【问题描述】:

在我们开始之前,strip_tags() 不起作用。

现在,

我有一些需要解析的数据,问题是,我需要摆脱所有格式非常奇怪的 html。 标签看起来像这样: (注意空格)

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

我一直在尝试的所有正则表达式都不起作用,而且我对正则表达式格式的了解不足以使它们起作用。我不在乎保留标签内的任何内容,如果可以的话,我更愿意删除链接内的文本。

有人知道吗?

(我真的需要有一天坐下来学习正则表达式)

【问题讨论】:

【参考方案1】:

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

工作?

【讨论】:

您可以使用+ 代替*,因为* 如果在文本中找到,您还将替换&lt;&gt;【参考方案2】:

如果您在strip_tags() 之前的变量上使用html_entity_decode()strip_tags() 将起作用

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

【讨论】:

【参考方案3】:

不是万无一失的解决方案,但适用于您发布的内容:

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

【讨论】:

【参考方案4】:

格式奇怪?那是有效的HTML,对吗?在那种情况下,我不会用正则表达式来触及它。关于这如何出错以及为什么这是一个坏主意的例子不胜枚举。相反,我会在其上使用 HTML Tidy 来清理不必要的空白。

【讨论】:

我本来打算发这个的,但是太累了,说不清楚。 +1。 当我通过 HTML Tidy 运行字符串时,它会将 符号更改为 ,因此 strip_tags() 仍然无法处理这些。我同时使用了 tidy_parse_string() 和 tidy_repair_string()。还有其他我看不到的功能吗?【参考方案5】:

http://ca3.php.net/strip_tags 可能是你需要的。

【讨论】:

strip_tags() 不起作用(正如我的问题的第一行所指出的那样),因为 PHP 由于格式化而无法将标签识别为 HTML。这也是我的第一个想法。【参考方案6】:

试试这个并告诉我。

<?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>');
?> 

【讨论】:

strip_tags() 不起作用(如我的问题的第一行所述),因为 PHP 无法将标签识别为 HTML。这也是我的第一个想法。 你后来添加的吗?我完全错过了...您尝试使用 preg_replace 了吗? 不,帖子根本没有被编辑。我在问我可以使用的正则表达式。 Chaos 的答案很可能是我最终会使用的答案,但是如果我可以使用 tidy html 来清理代码,那么使用 strip_tags 就可以了,但是我在 tidy html 中找不到可以满足我需要的函数;因此为什么我没有检查混乱的答案。 :)

以上是关于php正则表达式删除HTML的主要内容,如果未能解决你的问题,请参考以下文章

php 正则表达式帮助,删除以 [caption id= 开头的字符串

PHP 删除/替换 - href / anchor / link - 在html / string中 - preg_replace - php - regex - 正则表达式

正则表达式删除所有空的 HTML 标记

高级正则技巧PHP正则表达式过滤html标签属性(DEMO)

PHP 正则表达式从字符串中删除 http://

PHP 正则表达式 - 删除所有非字母数字字符