0

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

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

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

4

2 回答 2

1

您可以使用该函数在循环中查找锚标记结尾 ( </a>),并为您找到的锚的数量设置一个计数器。当你达到三个时,只需在找到最后一个的位置将字符串分成两部分(+4 表示“”的长度)并用于字符串的其余部分。forstrpos ()strpos ()</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);
}
于 2012-04-26T08:37:55.440 回答
0

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

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

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

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

于 2012-04-26T08:38:21.740 回答