【问题标题】:Limit number of links in a string (PHP)限制字符串中的链接数(PHP)
【发布时间】:2012-04-26 08:32:08
【问题描述】:

我刚刚开始在我的博客上允许访客发帖,但为了避免垃圾邮件,我想自动限制每个帖子的链接数。

如果作者创建的链接超过 3 个,则应删除其余链接,但不应删除锚文本。

这可能吗?

最好的问候 金克里斯滕森

编辑:

感谢您的回复。我现在找到了以下解决方案:

$html = 'hejsdjhf ksdfh ksdhf ksdfh klsfh kldjfh klsdfh ksdfh ksdfh ksdfh ksd <a href="http://www.test.com">test</a> dkhjdfjkgh ksdfhg ksdhf kjsdhfkg jhsdfklgh sdlfkg <a href="http://www.test.com">test2</a> skdjfh kgh kshg kdjh gklhf gkldhg kjsdfhgk hjsdfkg hdkgh dksfgh ksdfhg ksdhf g <a href="http://www.test.com">test3</a>';

$regexp = "/<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>/siU";
if(preg_match_all($regexp, $html, $matches)) {
    $link_count = count($matches[2]);
}

//echo $link_count;
$limit = $link_count - 2;

$regexp = "/<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>/siU";
echo preg_replace($regexp, "$2", $html, $limit);

我不知道它是否非常有效,但它确实有效:)

【问题讨论】:

    标签: php regex hyperlink limit


    【解决方案1】:

    您可以使用strpos () 函数在for 循环中查找锚标记结尾(&lt;/a&gt;),并为您找到的锚的数量设置一个计数器。当您达到三个时,只需在找到最后一个 strpos () 的位置将字符串分成两部分(“&lt;/a&gt;”的长度为 +4),然后在字符串的其余部分使用 strip_tags ()

    编辑: 像这样的:

    define ('MAX_ANCHOR', 3);
    define ('ANCHOR_ENDING', '</a>');
    
    $counter = 0;
    $strposResult = 0;
    do {
      $strposResult = $strposResult === FALSE ? FALSE : strpos ($string, ANCHOR_ENDING, $strposResult) + strlen (ANCHOR_ENDING);
      $counter++;
    } while ($counter < MAX_ANCHOR && $strposResult !== FALSE);
    
    if ($counter == MAX_ANCHOR) {
      $firstHalf = substr ($string, 0, $strposResult);
      $secondHalf = substr ($string, $strposResult);
      $string = $firstHalf . strip_tags ($secondHalf);
    }
    

    【讨论】:

      【解决方案2】:

      您可以在 PHP 中使用正则表达式

      preg_match_all('/\<a[^>]+>/i',$html, $result);
      

      这个正则表达式会捕捉到你所有的链接标签并将它设置在 $result 变量上。

      你只需要使用这个变量来计算你有多少链接标签

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-18
        • 2018-02-10
        • 2010-10-05
        • 1970-01-01
        • 2015-09-27
        • 2013-06-03
        相关资源
        最近更新 更多