我从像
这样的网址中剥离了标记数据$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()
将所有属性值连接在一起,因此很难分析属性值。
所以朋友们可以帮助我剥离每个标签并存储在一个数组中,或者在每个剥离的标签数据的末尾放置一个分隔符。
提前致谢:)
答案 0 :(得分:1)
使用strip_tags()
无法实现此目的,因为它只会删除标记。你不想用例如替换它们。空白字符(新行,空格,...)。
您应该使用正则表达式调用来执行此操作,该调用只替换所有标记。
更好的方法是使用DOMDocument解析获取的页面,以便您可以直接从HTML结构派生结构。
您有以下示例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
)
DOMDocument
实现了DOM方法,因此您必须通过HTML结构处理它们提供的可能性。DOMDocument
在内存方面会变得相当昂贵。