PDA

Bekijk Volledige Versie : Link aanpassen met regexp



Martijn Berendsen
26/08/05, 12:35
Hallo allemaal,

Voorbeeld:
<a href="www.abc.com">ABC</a>
<a href="www.xyz.com">www.xyz.com</a>

Ik probeer een script te schrijven die het deel van een link binnen de
HTML tags zelf vervangt (in dit geval www.abc.com en www.xyz.com) door
een andere link (een redirect), zonder daarbij het tekstdeel van een
link te wijzigen ("www.xyz.com"), ook als dit een link is.

Ik heb zelf iets geschreven maar die vervangt alle links in de tekst,
ongeacht de locatie.

Iemand een idee?
Vriendelijke groet,
Martijn

function replaceUrls($text)
{
global $BASE_URL;

$pattern = "[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]";
$replacement = "\\0";
$text = eregi_replace($pattern, $replacement, $text);

$endoftext = 0;

while (!$endoftext)
{
$start = strpos($text, "");
$end = strpos($text, "");

if (($start) && ($end))
{
$url = substr($text, $start + 5, $end - $start - 5);

$newurl = "redirect.php?url=$url";
$oldurl = "" . $url . "";

$text = str_replace($oldurl, $newurl, $text);
}
else
{
$endoftext = 1;
}
}
return $text;

Ronald Paul
26/08/05, 14:15
"Martijn Berendsen" <Martijn.Berendsen@gmail.com> schreef:

>Voorbeeld:
><a href="www.abc.com">ABC</a>
><a href="www.xyz.com">www.xyz.com</a>
>
>Ik probeer een script te schrijven die het deel van een link binnen de
>HTML tags zelf vervangt (in dit geval www.abc.com en www.xyz.com) door
>een andere link (een redirect), zonder daarbij het tekstdeel van een
>link te wijzigen ("www.xyz.com"), ook als dit een link is.
>
>Ik heb zelf iets geschreven maar die vervangt alle links in de tekst,
>ongeacht de locatie.
>
>Iemand een idee?

Je moet niet op zoek gaan naar URL, maar enkel naar

href="[wat dan ook]"

Bijvoorbeeld:

$voorvoegsel = 'redirect.php?url=';
$html = preg_replace('/href="([a-z0-9.:\/]+)"/i',
'href="' . $voorvoegsel . '\1"', $html);

--
Groet, Ronald

John Bokma
26/08/05, 14:55
Ronald Paul <usenet@rcpaul.nl> wrote:

> Bijvoorbeeld:
>
> $voorvoegsel = 'redirect.php?url=';
> $html = preg_replace('/href="([a-z0-9.:\/]+)"/i',

preg... '/href="(.+?)"/i'
of '/href="([^"])"/i' (als preg perl compatible genoeg is)

Je vergeet nl. een aantal tekens die wel mogen in een URL (b.v. ?,&,%)

--
John Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html

John Bokma
26/08/05, 14:55
John Bokma <john@castleamber.com> wrote:

> preg... '/href="(.+?)"/i'
> of '/href="([^"])"/i' (als preg perl compatible genoeg is)

'/href="([^"]+)"/i'

moet dat zijn

--
John Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html