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 :)
In de functie parsetekst zie ik het volgende:
geturl('\\1') , hieruit maak ik op dat hij de URL \\1 om moet zetten naar een kort adres als hij langer is dat 50 tekens...
je moet dus je code aanpassen dat hij het URL omzet, en niet \\1...
Robbert:
je moet dus je code aanpassen dat hij het URL omzet, en niet \\1...


dat is dus mijn probleem

Mitch:
Waarom niet gewo0n een [url=link.to.site]description ???


dat komt er ook, alleen wanneer dat niet gebruikt wordt wil ik de url dus afkappen zodat het niet een oneindig lange url wordt..
Je moet de functie eigenlijk in de string krijgen om \\1 te kunnen gebruiken, alleen in de string werkt de functie niet meer ...
Kheb um :)
Ow ik ben goed :P
Zo dus:
<?
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 [ url]http://www.erglangurladresdieikwilafkappennamaximaal50karakterswantditsuckt/[/ url]";
$txt = parsetext($txt);

echo $txt;
?>
Voorbeeld op : http://sh4d3h.ath.cx/parse.php
Sjiek da ik ook gebruiken op men nieuwe site
wat is daar anders aan??
Ik heb de functie in de string waardoor ik \\1 als argument kan geven :)
Is het je nouw gelukt? :P
het gebruik van $1 is netter -- werkt met recentere php versies.

Reageren