Ik ben uit een tekstveld ($content) de hyperlinkjes aan het verwijderen. Omdat ik niet altijd weet wat de link is het wat moeilijker te verwijderen.
Nu heb ik een scriptje gemaakt die zoekt naar de <a href en daarna naar de >
Hierna het gelinktje textje tussen de > en de </a> eruit wippen en terug plaatsen in de tekst, daarna allen de </a> nog uit de $content verwijderen.
$content is veel tekst, maar niet altijd bekend hoeveel (geen max).


Ik heb daarvoor het volgende:

$a = 1;
while ($a != 0) {
$a = strpos($content, "<a href");

if ($a != 0) {
$b = strpos(substr($content, $a), ">");
$part = substr($content, $a, $b);
$parts = split ("</a>", $part);
$var = $parts[1];
$content = substr($content, 0, $a) . $var . substr($content, $a + $b + 1);
}
}

Als ik dit laat werken op een testserver dan werkt het prima, zet ik 'em op een productieserver dan gaat mn server helemaal overstuur raken (100% processor util).

Waar ga ik de fout mee in??
Je zou daar een regex voor kunnen gebruiken. Zie de voorbeeldcode.

<?php
$content = "Een link in de content: <a HREF=\"http://www.abc.php\">abc</a><br>En nog een link: <a href=\"http://www.abc.php\">abc</a>; gevolgd door nog veel meer tekst.";

$content = preg_replace('{<a\s*href="[^\"]+"\s*>(.+?)<\/a>}i','<font color="red">$1</font>', $content);
echo $content;
?>
Het werkt als een trein! Thanx

Nog 1 klein probleempje.

Hoe gaat het als er een class"onbekendeclass" en een target="onbekend" in de link verwerkt zitten?
Ik zou zo zeggen probeer het eens. Veel kennis van die preg_replace heb ik niet, maar als ik het zo doorlees zoekt die naar "<a href= |inhoud van de tag| >" de tekst ertussen en "</a>" en haalt die de hele <a t/m </a> weg, en laat de tekst die tussen de tags staat staan.
Ik heb 'em:

De oplossing is:

<?php
$content = "Een link in de content: <a HREF=\"http://www.abc.php\"; class=\"jaja\" target=\"_blank\">abc</a><br>En nog een link: <a href=\"http://www.abc.php\">abc</a>; gevolgd door nog veel meer tekst.";

$content = preg_replace('{<a\s*href="[^\"]+"\s*class="[^\"]+"\s*target="[^\"]+"\s*>(.+?)<\/a>}i','<font color="red">$1</font>', $content);

echo $content;
?>

Thanx Burdy en Robert!

Reageren