2013-03-27 84 views
1

我用下面找到$內容PHP匹配的網址,並使用preg_replace_callback()

$content = preg_match_all('/(http[s]?:[^\s]*)/i', $content, $links); 

內的所有URL's但是,這將在http://www.google.com/some/path取決於http://一部分。

我的問題是:

1 - 我怎樣才能修改以便也打的都開始只有www,例如鏈接www.google.com

2 - 主要目標是找到鏈接,並用從另一個函數返回的值替換它們。我試圖preg_match_callback(),但它不工作(可能用錯了..

$content = preg_replace_callback(
      "/(http[s]?:[^\s]*)/i", 
      "my_callback", 
      $content); 

function my_callback(){ 

// do a lot of stuff independently of preg_replace 
// adding to =.output... 

return $output; 
} 

現在,在我的邏輯(這可能是錯誤的)從$content所有比賽將被$output被替換。我是什麼做錯了

(請沒有匿名函數 - 我是一個老服務器上測試)?

編輯我 - 評論後,試圖用更多的細節

澄清

回調:

function o99_simple_callback($url){ 
    // how to get the URL which is actually the match? and width ?? 
     $url = esc_url_raw($link); 
     $url_name = parse_url($url); 
     $url_name = $description = $url_name['host'];// get rid of http://.. 
     $url = 'http://something' . urlencode($url) . '?w=' . $width ; 
     return $url; // what i really need to replace 
    } 
+0

檢查內容:HTTP://計算器。 com/questions/1755144/how-to-validate-domain-name-in-php,特別是velcrow的迴應。 – Gael 2013-03-27 02:41:36

+0

謝謝,但它忽略了HTTP和HTTPS url? 。此外,還沒有關於回調的信息。基本上它連接了2個正則表達式,不是嗎? – 2013-03-27 02:45:31

回答

2

要修改已經允許與www開頭的URL正則表達式,你只需這樣寫:

/((http[s]?:|www[.])[^\s]*)/i 
    +   ++++++++ 
+0

謝謝!我會檢查一下..回調的第二部分呢?我用錯了嗎? – 2013-03-27 03:07:29

+0

我不確定,因爲你沒有包含你的代碼。 'my_callback'應該接受一個參數,像這樣:'my_callback($ matches)',並且你可以使用'$ matches'中的項來構造你的輸出。 – 2013-03-27 03:15:12

+0

看到我的編輯我... – 2013-03-27 03:22:45