PHP - 获取两个元素的内部HTML代码

时间:2013-08-06 20:44:52

标签: php innerhtml

我目前正处于转型过程中,我想制作现有网站的CMS。到现在为止(几年)我正在生成并保存完整的html文件,我想将这些页面的内容存储在数据库中。我想,我的运气是,我想从每个html中获取的两个元素在一个html文件中是唯一的,在所有文件中都是相同的。我试过这个:

if ($handle = opendir('.')) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            $string= file_get_contents($entry);
            $pattern = "/<h1>(.*?)<\/h1>/";
            preg_match_all($pattern, $string, $uname);
            $pattern = '/<p class=\"user_info\"><strong>(.*?)<\/strong><\/p>/';
            preg_match_all($pattern, $string, $udesc);
            echo "NAME: ".$uname[1][0]."<br>";
            echo "DESC: ".$udesc[1][0]."<br>";
            //MYSQL SAVING WILL GO HERE
        }
    }
    closedir($handle);
}

以上代码提取(h1)NAME(/ h1)(想象(==&lt; and)==&gt;)部分,但不是(p class =“user_info”)(强)内容(/ strong)( / p)部分,它只是空白。

我也试过不同的方法:

if ($handle = opendir('.')) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            $string= file_get_contents($entry);
            $doc = new DOMDocument();
            $doc->loadHTML($string);
            $h1 = $doc->getElementsByTagName('h1')->item(0)->textContent;
            echo "NAME: ".$h1."<br>";
            $p = $doc->saveHtml($doc->getElementsByTagName('p')->item(0)); // $p = $doc->getElementsByTagName('p')->item(0)->textContent; loads content, just without html tags, so I can not use it... :S
            echo "DESC: ".$p."<br>";
            //MYSQL SAVING WILL GO HERE
        }
    }
    closedir($handle);
}

以上代码有效,但不符合预期。我需要段落的完整HTML代码,而不仅仅是文本。我还尝试了$ doc-&gt; savehtml(),但仍然没有。

请帮助,并提前感谢!

1 个答案:

答案 0 :(得分:0)

删除->textContent

$h1 = $doc->saveHtml($doc->getElementsByTagName('h1')->item(0));
echo "NAME: ".$h1."<br>";
$p = $doc->saveHtml($doc->getElementsByTagName('p')->item(0));