3

如何检查 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);
4

3 回答 3

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

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

if($bHasLink){
    postEntryWithUrl($text);
}else{
    postEntry($text);
}
于 2013-10-19T08:45:02.160 回答
4

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

<?

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

于 2013-10-19T08:14:48.597 回答
4

您可以使用stristr()

$has_link = stristr($string, 'http://') ?: stristr($string, 'https://');

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

或者preg_match()

preg_match('/(http|ftp|mailto)/', $string, $matches);
var_dump($matches);

https://www.php.net/manual/en/function.preg-match.php

于 2013-10-19T08:16:37.213 回答