Het onderwerp zegt het al een beetje...

Ik heb een preg_replace die [ url] en [/ url] vervangt door een URL adres. Alleen als je iets yahoo achtigs hebt of iets phphulp.nl/voorbeeld/simpelgastenboek/gastenboek.php iets, dan is dit een heel erg langggg url adres.. Dit wil ik gaan afkappen door:

<?
function geturl($url)
{
if (strlen($url) > 50)
$short = substr($url, 0, 23) . "...." . substr($url, -23);
else
$short = $url;

return "<a href=\"" . $url . "\">" . $short . "</a>";
}

function parsetekst($text)
{
$text = eregi_replace("\\[url\\]www.([^\\[]*)\\[/url\\]";, geturl('\\1'), $text);
}

$msg = "Hallo [ url]http://www.erglangurladresdieikwilafkappennamaximaal50karakterswantditsuckt/[/ url]";

$msg = parsetekst($msg);
?>

Nu het probleem:
strlen($url) geeft telkens maar: 3 aan. Ik denk dat dit komt door: \\1 die hij zo letterlijk pak, maar hij returned $url wel goed na de functie.. Dus als ik het parse dan toont hij het goed, maar als ik het in de functie geturl() parse zegt hij 3! Ik weet dus bijna zeker dat het komt omdat hij \\1 pakt ipv wat \\1 echt is, in dit geval dus een lang url adres..

de code bovenstaand heb ik trouwens net zelf ff snel getypt dus kan foutje in zitten, mara het gaat om het idee :)
mitch hij doet het hoor.. je was alleen klein dingetje vergeten: je had (.+) en dat moest zijn (.+?) :P
Waarom dat ? ...
Dat ? zegt toch gewoon dat het voorgaande 0 of 1 keer mag voorkomen, als het 0 keer voorkomt hoef je niets te vervangen en heb je die url tags niet nodig.
Dus:
[url ](hier nix)[/ url] daar heb je nix aan ...
Terwijl + aangeeft 1 of meer keer zo'n vrij teken dus:
[url ]hier vrije tekens maar minimaal 1[/ url]

Dus (.+) lijkt me beter ...
Dan doe je het toch niet goed hoor ...
<?
function cut($url)
{
if(strlen($url) > 50)
$short = substr($url, 0, 20) . "..." . substr($url, -20);
else
$short = $url;

$link = "<a href=\"" . $url . "\">" . $short . "</a>";

return $link;
}

function parsetext($txt)
{
$txt = preg_replace("/\[url\](.+)\[\/url\]/sie", "cut('\\1')", $txt);

return $txt;
}

$txt = "Hallo http://www.erglangurladresdieikwilafkappennamaximaal50karakterswantditsuckt/";
$txt = parsetext($txt);

$txt2 = "Blaat : http://phphulp.nl/voorbeeld/getimage.php?image=Haveabreak_HaveaKitKat.jpg";
$txt2 = parsetext($txt2);

echo $txt . "<br />";
echo $txt2;
?>
http://sh4d3h.ath.cx/parse.php

Reageren