我刚刚开始在我的博客上发布访客帖子,但为了避免垃圾邮件,我想自动限制每个帖子的链接数量。
如果作者创建的链接超过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);
我不知道它是否非常有效,但它有效:)
答案 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来计算您拥有的链接标记