2013-05-05 14 views
0
目前

我有以下代碼:PHP正則表達式查找和替換URL中的DOM屬性

//loop here 
    foreach ($doc['a'] as $link) { 
     $href = pq($link)->attr('href');     
     if (preg_match($url,$href)) 
     { 
      //delete matched string and append custom url to href attr 
     }  
     else 
     { 
      //prepend custom url to href attr 
     } 
    } 
    //end loop 

基本上我已經取瓶捲曲外部頁面。我需要將自己的自定義URL附加到DOM中的每個href鏈接。我需要通過正則表達式檢查每個href attr是否已經有一個基礎URL,例如www.domain.com/MainPage.html/SubPage.html

如果是,則用我的自定義網址替換www.domain.com部件。

如果沒有,那麼只需將我的自定義網址附加到相對網址即可。

我的問題是,我應該使用哪種正則表達式語法以及哪個php函數? preg_replace()是否是適當的函數?

乾杯

回答

2

你應該使用內部,而不是正則表達式只要有可能,因爲往往這些功能的作者們認爲邊緣的情況下(或讀取的所有細節的情況下,REALLY long RFC for URLs)。對於你的情況,我會用parse_url()然後http_build_url()(注意,後者的功能需要PECL HTTP,可以通過以下安裝):

foreach ($doc['a'] as $link) { 
    $urlParts = parse_url(pq($link)->attr('href'));    

    $urlParts['host'] = 'www.yoursite.com'; // This replaces the domain if there is one, otherwise it prepends your domain 

    $newURL = http_build_url($urlParts); 

    pq($link)->attr('href', $newURL); 
} 
+0

其實我:使用你的代碼

$href = 'http://www.domain.com/MainPage.html/SubPage.html'; $parts = parse_url($href); if($parts['host'] == 'www.domain.com') { $parts['host'] = 'www.yoursite.com'; $href = http_build_url($parts); } echo $href; // 'http://www.yoursite.com/MainPage.html/SubPage.html'; 

例只是想到了什麼。我的自定義url不是靜態的,即它將取決於用戶輸入並存儲在一個變量中。 preg_replace能夠將一個url存儲在一個變量中,將它與另一個url進行比較,並用我自己的url替換匹配的url? – 2013-05-05 03:12:19

+0

這不需要是靜態的。你可以在'foreach'循環中使用它。讓我重申一下,我會使用'preg_replace()'來推薦*。 – 2013-05-05 03:14:50

+0

我只是仔細重新閱讀你的答案,哇,這真的是我需要的!哈哈對不起我的壞,我一定是太累了,沒有太多的編碼。我會立即嘗試這種方法,儘快回覆:) – 2013-05-05 03:19:29