2012-02-03 48 views
0

我的代碼是:函數將文本網址轉換成HTML URL

$rawhtml = file_get_contents("site url"); 

$pat= '/((http|ftp|https):\/\/[\w#$&+,\/:;[email protected]]+)[^\w#$&+,\/:;[email protected]]/i'; 

preg_match_all($pat,$rawhtml,$matches1); 

foreach($matches1[1] as $plinks) 
{ 
    $links_array[]=$plinks; 
} 

測試的幾種情況後,我注意到函數有一些「泄漏」。如果有空白,鏈接將被破壞。

比如我有一個變量本文網址:

$rawhtml = " http://www.filesonic.com/file/2185085531/TEST Voice 640-461 Test Cert Guide.epub 
" 

結果應該是由行只有一個鏈接:

http://www.filesonic.com/file/2185085481/TEST Voice (640)+461 Test Cert Guide.pdf 

但結果是

http://www.filesonic.com/file/2185085531/TEST 

有時提取的鏈接還包含,'"年底。如何擺脫這些?

+5

你問什麼可能是不可能的。腳本怎麼知道在''現在訪問http://example.com'''這個空間不是URL的一部分,而是''現在下載http://example.com/white space.pdf'''它是? – JJJ 2012-02-03 14:01:18

+3

從技術上講,這些空間不屬於URL。解決缺乏恰當的語法只會是一個黑客。而不知道實際的源頁面,很難解決。但你有沒有考慮過其他各種[提取鏈接形式的HTML](http://stackoverflow.com/search?q=extract%20links%20from%20html%20php)問題中提到的替代方法? – mario 2012-02-03 14:02:11

+0

如何從提取的鏈接中刪除這些逗號,引號或雙引號 – Harvi 2012-02-03 14:19:27

回答

0

如何擺脫這些逗號,引號或雙引號從抽取的路段

人們可以使用(?<![,'"])排除在最後的東西。但你的問題是,你根本不應該使用後字符類:

[^\w#$&+,\/:;[email protected]] 

這就是匹配"'

作爲另一個問題的解決辦法,第一個字符類可以增加一個空格。

[\w#$&+,\/:;[email protected] -]+ 
       ▵ 

如上所述,這可能不是一個好的解決方案,可能會導致其他不匹配。