我有这段HTML:
<div class="embed">
<iframe width="300" height="200" frameborder="0" allowfullscreen="" src="http://www.youtube.com/embed/123456"></iframe>
Some text I don't want
</div>
这是插入HTML的方式:
<div class="embed"><?php echo $item['embed_html']; ?></div>
这就是
$item['embed_html']
呼应:
<iframe width="300" height="200" frameborder="0" allowfullscreen="" src="http://www.youtube.com/embed/123456"></iframe>Some text I don't want
所以我不想解析整个文档,只是这个特定的字符串。
不要担心,这不是“外部用户”输入的HTML,在任何人指出允许原始代码到页面的安全问题之前...
我需要提取HTML但保留文本(所以它看起来像这样):
<div class="embed">
<iframe width="300" height="200" frameborder="0" allowfullscreen="" src="http://www.youtube.com/embed/123456"></iframe>
</div>
有多种不同的嵌入代码,所以我想我要问的是删除未包含在HTML元素中的文本的最佳方法是什么(在&lt;和&gt;之间)(<img, <p, <div, <iframe, <object, <embed, <video
等可能都在本节中使用)。只是如果有任何文本添加到它没有包装在标签中,它应该从字符串中删除它。
我不想要在标记中包装有问题的文本,我想完全删除它。在某种程度上,与strip_tags()的反向
答案 0 :(得分:3)
这是一个简单的正则表达式,可以在99%的情况下执行您想要的操作:
<[^>]+>
它所做的只是匹配XML / HTML标记。而已。没有干净的方法告诉它只匹配某个节点的DOM子树内的文本(例如<div class="embed">
)。为此,您将使用无上下文解析器,例如DOM解析器。
您的样本输入将匹配到:
{
"<div class="embed">",
"<iframe width="300" height="200" frameborder="0" allowfullscreen="" src="http://www.youtube.com/embed/123456">",
"</iframe>",
"</div>"
}
鉴于此:<!-- <foo> -->
输入文字,但最终会在提取<foo>
后尽管已经过技术评论。事先删除所有出现的正则表达式<!--.*?-->
应该可以解决这个问题。
无论如何,一般来说,你最好使用DOM解析器来处理任何XML / HTML。