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>)を探し、見つかったアンカーの数のカウンターを取得できます。3 つに達したら、最後に見つかった場所 (" " の長さ +4 ) で文字列を 2 つの部分に分割し、残りの文字列で使用します。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 変数に設定します。

この変数を使用して、リンクタグの数をカウントするだけです

于 2012-04-26T08:38:21.740 に答える