我正在使用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>
在上面的示例中,我需要用户名(因此,'font'标签之间的名称)。我想将结果放入一个数组中,然后我可以使用'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循环之前位于数组中。
感谢。