2017-08-23 61 views
1

解析從一個網頁鏈接(HREF)請參見下面的我的腳本:無法通過PHP

<?php 

    function getContent() 
    { 
     $ch = curl_init(); 
     curl_setopt($ch,CURLOPT_URL, 'http://localhost/test.php/test2.php'); 
     curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 
     $output=curl_exec($ch); 
     curl_close($ch); 
     return $output; 

    } 

    function getHrefFromLinks ($cString){ 

     libxml_use_internal_errors(true); 

     $dom = new DomDocument(); 
     $dom->loadHTML($cString); 

     $xpath = new DOMXPath($dom); 
     $nodes = $xpath->query('//a/@href'); 
     foreach($nodes as $href) { 

      echo $href->nodeValue; echo "<br />";     // echo current attribute value 
      $href->nodeValue = 'new value';    // set new attribute value 
      $href->parentNode->removeAttribute('href'); // remove attribute 
     } 

     foreach (libxml_get_errors() as $error) { 

     } 

     libxml_clear_errors(); 

    } 



echo getHrefFromLinks (getContent()); 

?> 

http://localhost/test.php/test2.php輸出是:

<a href='/oncelink/index.html'><span class="lsbold">Luck</span> Lucky</a><a href='/oncelink-2/lucky'locki'><span class="lsbold">Luck</span>'s Locki</a> 

回聲getHrefFromLinks(的getContent()) ;運行時,輸出爲:

/oncelink/index.html<br />/oncelink-2/lucky<br /> 

這是錯誤的,因爲輸出應爲:

/oncelink/index.html<br />/oncelink-2/lucky'locki<br /> 

據我所知,從鏈接生成href值是不知何故不正確的,它包括一個附加的撇號但我無法改變它,因爲它是預先生成的。

的另一個問題是,我怎麼能得到跨度變量的值:

<span class="lsbold"> 

提前感謝!

+1

你不能指望一個DOM解析器來得到你想要的結果,當你將無效的HTML添加到其中以開始。您的第二個鏈接也只能鏈接到任何現代瀏覽器中的'/ oncelink-2/lucky',並按照指定應用錯誤更正。 – CBroe

+0

感謝您的評論@CBroe,你能提出一個替代方案嗎? –

+0

誰首先生成了破碎的HTML,爲什麼不能要求他們解決這個問題?跳過箍以某種方式嘗試和處理亂七八糟的數據總是不太可取的選項,以實際獲得固定的數據開始... – CBroe

回答

0

解決:)

嘛。如果這是愚蠢的,但它的工作原理,那麼它是不是愚蠢:d

只需添加以下代碼到底:

$fix = str_replace("href='", 'href="', getContent()); 
$fix = str_replace("'>", '">', $fix); 
echo getHrefFromLinks ($fix);