PHP在body中获取标签并删除每个标签内的文本内容

时间:2011-11-19 15:06:06

标签: php regex

我想抓住体内的所有内容。

<html>
<head><title>Test</title>
</head>

<body>
<div id="dummy">Your contents</div>
<p class="p">Paragraph</p>
<div id="example">My Content</div>
</body>
</html>

以及我想要的最终结果:

<div id="dummy"></div>
<p class="p"></p>
<div id="example"></div>

不喜欢这样:

<div id="dummy">Your contents</div>
<p class="p">Paragraph</p>
<div id="example">My Content</div>

2 个答案:

答案 0 :(得分:2)

虽然这样可行:

if (preg_match('%<(body)[^>]*>(.*)<\s*/\1\s*>%s', $subject, $regs)) {
    $result = $regs[2];
}

我不推荐它。使用php,你有更好的工具来完成这项工作。例如,使用this解析器:

# create and load the HTML  
include('simple_html_dom.php');  
$html = new simple_html_dom();  
$html->load("<html>
               <head><title>Test</title></head>
               <body>
                 <div id="dummy">Your contents</div>
                 <p class="p">Paragraph</p>
                 <div id="example">My Content</div>
               </body>
            </html>");  


# get an element representing the body  
$element = $html->find("body"); 

修改

既然你坚持......

$result = preg_replace('%(<(div)[^>]*>).*<\s*/\2\s*>%', '\1</\2>', $subject);

这将删除div标签的内容。您也可以将div标签与其他标签交换。虽然我真的不知道你在哪里,我推荐它。

答案 1 :(得分:2)

$content = '<html>
<head><title>Test</title>
</head>

<body>
<div id="dummy">Your contents</div>
<p class="p">Paragraph</p>
<div id="example">My Content</div>
</body>
</html>';

preg_match('/(?:<body[^>]*>)(.*)<\/body>/isU', $content, $matches);
$bodycontent = $matches[1];
echo htmlspecialchars($bodycontent);
preg_match_all('/<[^>]*>/isU', $bodycontent, $matches2);
$tags = implode("",$matches2[0]);
echo htmlspecialchars($tags);