0

我正在使用 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 循环之前位于一个数组中。

谢谢。

4

0 回答 0