使用php获取html标记内的内容并在处理后替换它

esa*_*wan 4 html php get

我有一个像这样的html(sample.html):

<html>
<head>
</head>
<body>
<div id="content">
<!--content-->

<p>some content</p>

<!--content-->
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我如何'<!--content-->'使用PHP 获取2 html评论之间的内容部分?我想得到它,做一些处理并把它放回去,所以我必须得到并放!可能吗?

jim*_*lan 15

esafwan - 您可以使用正则表达式来提取div(某个id)之间的内容.

我以前为图像标签做过这个,所以适用相同的规则.我会查看代码并稍微更新一下消息.

[更新]试试这个:

<?php
    function get_tag( $attr, $value, $xml ) {

        $attr = preg_quote($attr);
        $value = preg_quote($value);

        $tag_regex = '/<div[^>]*'.$attr.'="'.$value.'">(.*?)<\\/div>/si';

        preg_match($tag_regex,
        $xml,
        $matches);
        return $matches[1];
    }

    $yourentirehtml = file_get_contents("test.html");
    $extract = get_tag('id', 'content', $yourentirehtml);
    echo $extract;
?>
Run Code Online (Sandbox Code Playgroud)

或更简单地说:

preg_match("/<div[^>]*id=\"content\">(.*?)<\\/div>/si", $text, $match);
$content = $match[1]; 
Run Code Online (Sandbox Code Playgroud)

吉姆


Gor*_*don 8

如果这是一个不涉及解析实际HTML文档的简单替换,您可以使用正则表达式,甚至只是str_replace为此.但一般来说,使用Regex进行HTML是不明智的,因为HTML不是常规的,并且提出可靠的模式很快就会变成一场噩梦.

在PHP中解析HTML的正确方法是使用实际知道如何理解HTML文档的解析库.你最好的原生赌注是DOM,但PHP有许多其他你可以使用的原生XML扩展,还有一些第三方库,如phpQuery,Zend_Dom,QueryPathFluentDom.

如果您使用搜索功能,您将看到此主题已被广泛涵盖,您应该没有问题找到显示如何解决您的问题的示例.