2014-06-30 42 views
1

我試圖從網頁即錨定的URL中提取數據:PHP - 解析串

require 'simple_html_dom.php'; 
$html = file_get_html('http://www.example.com'); 
foreach($html->find('a') as $element) 
{ 
    $href= $element->href; 
    $name=$surname=$id=0; 


    parse_str($href); 
    echo $name; 
} 

現在,這個問題是,它並沒有出於某種原因。所有的網址爲以下形式:

name=James&surname=Smith&id=2311245 

現在,奇怪的是,如果我執行

echo $href; 

我得到所需的輸出。但是,由於某種原因該字符串不會進行解析,並且它的長度爲strlen()函數的43。但是,如果我通過'name=James&surname=Smith&id=2311245'爲parse_srt()函數的參數,它工作得很好。可能是什麼問題呢?

+0

你有任何例如輸入HTML我們可以測試嗎?另外,你能否詳細說明「我得到想要的結果」?最後,爲了安全起見,切勿在沒有[第二個參數](http://us1.php.net/parse_str)的情況下執行'parse_str'。盲目覆蓋全局變量是有風險的。 –

+0

'$ name = $ surname = $ id = 0;'...? –

+0

'parse_str($ href,$ out); var_dump($ out);'你看到了什麼? – Steve

回答

3

我要把猜測,您的目標網頁實際上是正確編碼在其鏈接&罕見的頁面之一。例如:

<a href="somepage.php?name=James&amp;surname=Smith&amp;id=3211245"> 

要解析此字符串,您首先需要使用隱藏&amp; s。如果你喜歡,你可以用簡單的str_replace來做到這一點。

+0

這並不能解釋爲什麼'echo $ href;'據稱會給出正確的輸出。 (除非OP是錯誤的或正在查看的網頁瀏覽器的輸出。) –

+1

@ Mr.Llama你的括號「除非」正是它;)注意'strlen'輸出OP了? –

+0

哈!我完全錯過了那一點。 –

1

。假定該鏈接是絕對的,你只需要在查詢字符串。你可以使用parse_url,並使用out參數和parse_str訪問一個數組;

$html = file_get_html('http://www.example.com'); 
foreach($html->find('a') as $element) 
{ 
    $href= $element->href; 


    $url_components = parse_url($href); 
    parse_str($url_components['query'], $out); 

    var_dump($out) 
}