【问题标题】:Check if text contains URL [closed]检查文本是否包含 URL [关闭]
【发布时间】:2013-10-19 08:11:52
【问题描述】:

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

【问题讨论】:

  • 您可以使用基于正则表达式的搜索,在 google 上查找 URL 正则表达式。
  • "有些人在遇到问题时会想'我知道,我会使用正则表达式'。现在他们有两个问题。”
  • 如果你问一个字符串,就问一个字符串,而不是先写一些关于某个数据库的长句。保持对具体问题的问答,这里不是您的支持论坛。另请查看之前在哪里提出并回答了这个问题。然后概述为什么到目前为止您尝试过的现有答案没有为您提供。在此之前,我建议关闭以使该网站更加直截了当。
  • 很抱歉,我保证会记住这一点。谢谢。

标签: php


【解决方案1】:
$text = (string) $_POST['text'];

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

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

【讨论】:

    【解决方案2】:

    你可以使用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

    【讨论】:

    • 如果没有“http://”而只有“www.”怎么办?还是两者都没有?
    • 我真的没有注意到我这样做了。道歉。
    • @OraBrush 不用担心。鉴于 OP 缺乏上下文,我的只是一个猜测。尽管他提到了$text contains a url,但我认为它是完全合格的。当然,我的答案不适用于 SSL URL。
    • 如果我只写“google.com”会怎样?
    • 此答案仅涵盖 1 个 URL 方案,如果前面有 https 或没有像 @rushil 所说的那样怎么办。这个答案不应该被检查为答案...
    【解决方案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

    【讨论】:

    • 哇,这是一个simple 正则表达式? jk
    • 嗯,它工作,这是“简单”的事情......
    • 提示:对如此大的正则表达式模式使用 x modifer 和 PHP heredoc 字符串,以便更好地记录和阅读。
    • @Ikillnukes:“它的工作原理”从什么时候开始变得简单了?我认为“它有效”是脏但有效
    • 这行不通!
    猜你喜欢
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 2014-10-23
    相关资源
    最近更新 更多