2011-04-19 57 views
2

我有一個文本框用戶配置文件區域,其中用戶將rss url用'return'或每行的每個URL分開。然後它將被保存到數據庫。現在我如何獲得數組中的所有網址?從字符串中分隔url?

我知道這是非常基本的問題。搜索網絡發現很多東西,我感到困惑。我認爲小小的討論會有所幫助。

我也想要一些驗證,如果用戶不把任何http://之前的代碼將添加它。並忽略http://協議以外的URL。

我的CMS是WordPress的,所以如果有任何內置的功能,可能會幫助我讓我知道。

回答

4

使用爆炸功能後,你會想要做一個foreach做你正在尋找

$urlArray = explode("\r", $_POST["textBox"]) 
if(!empty($urlArray)) 
{ 
    foreach($urlArray as $url) 
    { 
     //Do your regex checking here 
    } 
} 

取決於你的技術水平,如果正則表達式是太複雜了(雖然我真的建議驗證學習它),你可以看看使用substr來評估每一個html行,儘管這是一個不太強大的版本。一個例子是:

$htmlString = substr($url, 0, 7); 
if($htmlString != "http://") 
{ 
    $url = "http://" . $url; 
} 
+0

好想法;你的回答完成了答案。 :) – KTF 2011-04-19 18:57:00

+0

我在哪裏可以學習RegEx? – Sisir 2011-04-19 19:12:55

+0

我不知道任何特定的真棒網站,但基本的谷歌搜索應該能夠把一些東西了RegEx教程。 RegEx是正則表達式的縮寫。您需要查看PHP的preg_match函數,瞭解如何在php代碼中實現正則表達式,但要學習正則表達式本身,請檢查以下基本教程:http://gnosis.cx/publish/programming/regular_expressions。 html – DaOgre 2011-04-19 19:15:35

1

使用PHP的爆炸功能:

$urlArray = explode("\r", $POST["URlsInputName"]) 

這將返回URL的假設$ POST [「URlsInputName」]數組包含包含由一個回車分隔的網址您的輸入框中的值。

+1

分隔符可能需要「\ n」或甚至「\ r \ n」...您需要測試一個。 – KTF 2011-04-19 18:29:22

0

基本塊如下:

 
$text_box_text = <<<TEXT_BOX 
     http://example.com 
     hello.example 
     ftp://ftp.invalid 
     HTTP:/fixslash.invalid 
TEXT_BOX 
; 

function url_map ($likely) 
{ 
    $likely = preg_replace('/^\s+/', '', $likely); #clean up white spaces 
    $likely = preg_replace('/\s+$/', '', $likely); # 
    $likely = preg_match('/^\w+:/', $likely) ? $likely : "http://$likely"; #prepend 
    $likely = preg_replace('|^http:/*|i', 'http://', $likely); #fix /s and case 
    return $likely; 
} 

$likely_urls = preg_split('/[\r\n]+/', $text_box_text); 
$good_urls = preg_grep('/^http:/', array_map("url_map", $likely_urls)); 

因爲這是你需要更偏執一點用戶輸入。更多錯誤檢查始終按順序排列:

preg_grep('|^http://[-\w][-.\w]+/|', ...) #assure valid host name

以及更多。