如何使用脚本PHP剪切此字符串此Html

时间:2014-04-09 00:16:51

标签: php html

我正在学习用curl抓取数据。 这是我的代码。

function readHTML($url){
 $data = curl_init();
 curl_setopt($data, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($data, CURLOPT_URL, $url);
 $result = curl_exec($data);
 curl_close($data);
 return $result;}

    $codeHTML =  readHTML('http://website.com/');$ex1 = explode('ol class=tabcont>', $codeHTML); $ex2 = explode('/ol>', $ex1[1]);echo $ex2[0];

我对此输出html代码有疑问。

<ul>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
</ul>

我想用PHP剪切代码<li></li>,所以像这样的代码

<ul>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
</ul>

我该怎么办?抱歉,我的英语不好。 :) 感谢。

1 个答案:

答案 0 :(得分:2)

由于您正在抓取此HTML,而不是硬编码。我觉得使用DomDocument是合适的。

<?php

$html = '<ul>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
</ul>';

$dom = new DOMDocument();
$dom->loadHTML($html);

$ul    = $dom->getElementsByTagName('ul')->item(0);
$count = 0;

$toRemove = array();

foreach ($ul->childNodes as $node)
    if ($node->tagName === 'li')
        if ($count++ >= 5)
            $toRemove[] = $node;
foreach ($toRemove as $node)
    $ul->removeChild($node);

$dom->removeChild($dom->firstChild);
$dom->replaceChild($dom->firstChild->firstChild->firstChild, $dom->firstChild);
echo $dom->saveHTML();

Output

<ul><li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>



</ul>

空行是由于<li>标记周围的新行所致。您也可以通过检查#text来删除它们。