strip标签使用PHP将分隔符或存储放置到数组中

时间:2012-02-22 10:12:03

标签: php strip-tags

我从像

这样的网址中剥离了标记数据
$url='http://abcd.com';
$d=stripslashes(file_get_contents($url));
echo strip_tags($d);

但不幸的是,所有标记值都像user14036100 9.00user23034003 11.33user32028000 14.00一样聚集在一起,其中存储了user1,user2,user3属性。由于strip_tags()将所有属性值连接在一起,因此很难分析属性值。

所以朋友们可以帮助我剥离每个标签并存储在一个数组中,或者在每个剥离的标签数据的末尾放置一个分隔符。

提前致谢:)

1 个答案:

答案 0 :(得分:1)

使用strip_tags()无法实现此目的,因为它只会删除标记。你不想用例如替换它们。空白字符(新行,空格,...)。 您应该使用正则表达式调用来执行此操作,该调用只替换所有标记。

更好的方法是使用DOMDocument解析获取的页面,以便您可以直接从HTML结构派生结构。

DOMDocument的使用示例

您有以下示例html页面:

<!DOCTYPE html>
<html>
    <head>
        <title>This is my title</title>
    </head>
    <body>
        <table id="someDataHere">
            <tr>
                <th>Country</th>
                <th>Population</th>
            </tr>

            <tr>
                <td>Germany</td>
                <td>81,779,600</td>
            </tr>

            <tr>
                <td>Belgium</td>
                <td>11,007,020</td>
            </tr>

            <tr>
                <td>Netherlands</td>
                <td>16,847,007</td>
            </tr>

        </table>
    </body>
</html> 

您可以使用DOMDocument来获取表格中的条目:

$url = "...";
$dom = new DOMDocument("1.0", "UTF-8");
$dom->loadHTML(file_get_contents($url));

$preparedData = array();
$table = $dom->getElementById("someDataHere");
$tableRows = $table->getElementsByTagName('tr');

foreach ($tableRows as $tableRow)
{
    $columns = $tableRow->getElementsByTagName('td');

    // skip the header row of the table - it has no <td>, just <th>
    if (0 == $columns->length)
    {
        continue;
    }

    $preparedData[ $columns->item(0)->nodeValue ] = $columns->item(1)->nodeValue;
}

$preparedData现在将保留以下数据:

Array
(
    [Germany] => 81,779,600
    [Belgium] => 11,007,020
    [Netherlands] => 16,847,007
)

一些注释

  • 由于您正在开发爬虫(spider),因此您高度依赖于目标网页的HTML结构。您可能必须在每次更改模板中的内容时调整搜寻器。
  • 这只是一个简单的例子,但它应该明确,现在如何使用它,以产生更高级的结果。
  • 由于DOMDocument实现了DOM方法,因此您必须通过HTML结构处理它们提供的可能性。
  • 对于非常庞大的HTML页面,DOMDocument在内存方面会变得相当昂贵。