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)
工作?
【讨论】:
您可以使用+
代替*
,因为*
如果在文本中找到,您还将替换<>
。【参考方案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 - 正则表达式