我正在使用 cURL 来获取动态页面。我尝试了几种不同的方法来创建包含此页面中信息的数组。
我需要从两个 HTML 标签之间的用户名创建一个数组(嵌套在其他标签中)。用户名也可能包含其他常见字符。我目前使用的方法有效,但包含许多杂散字符。
下面是页面输出 HTML 的示例(我不确定此处是否应考虑空格或换行)。这个动态页面中唯一改变的是用户名的数量,以及字体标签。
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body topmargin="0" marginheight="0" leftmargin="0" marginwidth="0" bgcolor="#ffffff">
<font face="Verdana" size=2>
<font color="#0000ff">User One</font>, <font color="#000000">User Two</font>, <font color="#000000">User Three</font>
</font>
</body>
</html>
在上面的示例中,我需要用户名(因此,“字体”标签之间的名称)。我想将结果放入一个数组中,然后我可以在其中使用“foreach”循环遍历用户名并继续查找关联的“id”。
我已经研究过使用正则表达式来包含字体标签。我还研究了剥离所有 html 标签('preg_split')的 cURL 的输出:
我的代码如下(匿名):
header("Content-type: text/plain");
$pvars = array('id' => '123456', 'subroom' => '0', 'style' => '3', 'comma' => '0', 'countonly' => '0');
$timeout = 10;
$myurl = "http://stackoverflow.com/online.pl";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $myurl);
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
curl_setopt($curl, CURLOPT_POST, 0);
curl_setopt($curl, CURLOPT_POSTFIELDS, $pvars);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$xml = curl_exec($curl);
$arr = preg_split("/\[.*?]|<.*?>/", $xml);
foreach($arr as $line)
{
$query = $db->simple_select("users", "uid", "username = '" . $db->escape_string($line) . "'");
$user = $db->fetch_array($query);
$i = $user['uid'];
echo $i."\n";
}
curl_close ($curl);
这不能按预期工作。相反,我选择打印的换行符返回多个,这显然表明存在 '$i' 的缺失值。
理想情况下,我希望用户名在到达我的 foreach 循环之前位于一个数组中。
谢谢。