2013-05-03 40 views
0

我通过curl获取外部页面并将其存储在变量中。然后我需要解析文档中的所有'a'标签并对其进行修改。为此,我需要遍历每个'a'标签。我当前的代码:使用phpQuery迭代DOM元素

<?php 
    require 'phpQuery/phpQuery/phpQuery.php'; 
    $url = $_GET['url']; 

    $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/1.0"); 
     curl_setopt($ch, CURLOPT_HEADER, 0); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $result= curl_exec ($ch); 
    curl_close ($ch); 

    $curlUrl = 'http://localhost:8888/curl2.php?url='.$url; 
    $doc = phpQuery::newDocument ($result); 



    //loop here 
    $href = $doc->find('a')->attr('href');  
    if (preg_match($url,$href)) 
    { 
     //do something 
    }  
    $doc->find('#nav li a')->attr('href', $curlUrl.$href); 
    //end loop 


    echo '<base href="'.$_GET['url'].'"/>'; 
    echo $doc; 
    ?> 

在jQuery的存在。每个()函数,它做什么,我需要通过每一个“A”标记迭代。在phpquery或其他php DOM方法中是否有类似的方法遍历文档并修改每个'a'标签?

干杯

回答

1

它已经有一段时间,因为我用phpQuery,但你应该能够只使用一个foreach

foreach ($doc['a'] as $link) { 
    $href = pq($link)->attr('href'); 
    // rest of code 
} 
+0

感谢您的答复,但代码的第一行是否有效?我仍然对PHP不熟悉,但可以在一个语句中有两个赋值运算符吗?这两项任务是做什么的? – 2013-05-03 13:47:45

+0

是的,你可以,但在我的答案这是一个错字:)我正在编辑,就像你评论。我的编辑是基于一些使用phpQuery的实时代码,我去检查它只是为了确保。 – fullybaked 2013-05-03 13:48:15

+0

所以如果我理解正确。所提取的外部内容以对象或数组的形式存储。然后可以通过foreach函数直接访问它。在pq中是否等同于.this? – 2013-05-03 13:52:26