检查文本是否包含URL

时间:2013-10-19 08:11:52

标签: php

如何检查PHP中的文本是否包含文本中的链接? 我有一个数据库表格式如下。

+------------------+
| id | posts | tag |
+------------------+
| 1  | text 1|  0  | //no links
| 2  | text 2|  1  | //contains links

基本上,我想验证提交的条目是否包含链接,如果是, tag列的值为1

有人可以帮我正确编码上面的示例吗?目前这是我的PHP:

include 'function.php';

$text= $_POST['text'];

//if $text contains a url then do this function 
postEntryWithUrl($text);

//else here 
postEntry($text);

3 个答案:

答案 0 :(得分:8)

$text = (string) $_POST['text'];

$bHasLink = strpos($text, 'http') !== false || strpos($text, 'www.') !== false;

if($bHasLink){
    postEntryWithUrl($text);
}else{
    postEntry($text);
}

答案 1 :(得分:3)

你可以做一个“简单”的正则表达式:

<?

include 'function.php';

$text= $_POST['text'];

$regex = "((https?|ftp)\:\/\/)?"; // SCHEME 
$regex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?"; // User and Pass 
$regex .= "([a-z0-9-.]*)\.([a-z]{2,3})"; // Host or IP 
$regex .= "(\:[0-9]{2,5})?"; // Port 
$regex .= "(\/([a-z0-9+\$_-]\.?)+)*\/?"; // Path 
$regex .= "(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?"; // GET Query 
$regex .= "(#[a-z_.-][a-z0-9+\$_.-]*)?"; // Anchor 

   if(preg_match("/^$regex$/", $text)) 
   { 
           postEntryWithUrl($text);
   } else {
           postEntry($text);
   }

?>

我已经完成了“多一点”的代码......正如你所看到的那样。 :d

答案 2 :(得分:1)

您可以使用strstr()

$has_link = strstr($string, 'http://');

http://php.net/manual/en/function.strstr.php