限制字符串 (PHP) 中的链接数


Limit number of links in a string (PHP)

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

如果作者创建的链接超过 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);

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

您可以使用

strpos () 函数在 for 循环中查找锚标记结尾 ( </a> ),并有一个计数器来表示您找到的锚点数量。当你达到三个时,只需在找到最后一个strpos ()的地方将字符串分成两部分(+4 表示"</a>")的长度,并在字符串的其余部分使用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);
}

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

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

此正则表达式将捕获所有链接标签并将其设置为$result变量。

只需要使用此 var 来计算您拥有的链接标签