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

时间:2012-04-26 08:32:08

标签: php regex hyperlink limit

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以使用</a>函数在for循环中查找锚标记结尾(strpos ()),并为您找到的锚点数量设置一个计数器。当你达到三个时,只需在找到最后一个strpos ()的位置将字符串分成两部分(长度为“</a>”时为+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);
}

答案 1 :(得分:0)

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

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

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

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