使用PHP一个html标签中获取内容并处理后更换使用PHP一个html标签中获取内容并处理后更换(G

2019-05-12 08:16发布

我有一个HTML(sample.html)所示:

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

<p>some content</p>

<!--content-->
</div>
</body>
</html>

我要如何那是2 HTML注释的内容部分'<!--content-->'使用PHP? 我想的是,做一些处理,并把它回来了,所以我必须得放! 可能吗?

Answer 1:

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

或者更简单地说:

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

吉姆



Answer 2:

如果这是一个简单的替代品,不涉及实际的HTML文档的解析,您可以使用正则表达式,甚至只是str_replace这一点。 但是总体来说, 这不是一个明智的使用正则表达式的HTML ,因为HTML是不是经常和未来与可靠的模式可以迅速成为一场噩梦 。

正确的方法在PHP解析HTML是使用真正知道如何让HTML文档的意义解析库。 你最好的本地的选择将是DOM ,但PHP有许多其他原生XML扩展 ,你可以使用,还有一些像第三方库的phpQuery , Zend_Dom , QueryPath中和FluentDom 。

如果您使用的搜索功能,你会看到,这个话题已经被广泛报道 ,你不应该有问题发现的例子,说明如何解决你的问题。



Answer 3:

<?php

    $content=file_get_contents("sample.html");
    $comment=explode("<!--content-->",$content);
    $comment=explode("<!--content-->",$comment[1]);
    var_dump(strip_tags($comment[0]));
?>

检查这一点,它会为你工作



Answer 4:

看看这里,这意味着你可以加载一个HTML文档插入的SimpleXML代码示例http://blog.charlvn.com/2009/03/html-in-php-simplexml.html

然后,您可以把它当作一个正常的SimpleXML对象。

编辑:这,如果你想在标签中的内容只会工作(如之间的<div>和</ DIV>)



Answer 5:

问题是嵌套的div我找到的解决方案在这里

<?php // File: MatchAllDivMain.php
// Read html file to be processed into $data variable
$data = file_get_contents('test.html');
// Commented regex to extract contents from <div class="main">contents</div>
//  where "contents" may contain nested <div>s.
//  Regex uses PCRE's recursive (?1) sub expression syntax to recurs group 1
$pattern_long = '{           # recursive regex to capture contents of "main" DIV
<div\s+class="main"\s*>              # match the "main" class DIV opening tag
  (                                   # capture "main" DIV contents into $1
    (?:                               # non-cap group for nesting * quantifier
      (?: (?!<div[^>]*>|</div>). )++  # possessively match all non-DIV tag chars
    |                                 # or 
      <div[^>]*>(?1)</div>            # recursively match nested <div>xyz</div>
    )*                                # loop however deep as necessary
  )                                   # end group 1 capture
</div>                               # match the "main" class DIV closing tag
}six';  // single-line (dot matches all), ignore case and free spacing modes ON

// short version of same regex
$pattern_short = '{<div\s+class="main"\s*>((?:(?:(?!<div[^>]*>|</div>).)++|<div[^>]*>(?    1)</div>)*)</div>}si';

$matchcount = preg_match_all($pattern_long, $data, $matches);
// $matchcount = preg_match_all($pattern_short, $data, $matches);
echo("<pre>\n");
if ($matchcount > 0) {
    echo("$matchcount matches found.\n");
//  print_r($matches);
    for($i = 0; $i < $matchcount; $i++) {
        echo("\nMatch #" . ($i + 1) . ":\n");
        echo($matches[1][$i]); // print 1st capture group for match number i
    }
} else {
    echo('No matches');
}
echo("\n</pre>");
?>


文章来源: Get content within a html tag using php and replace it after processing
标签: php html get