maar als er dan een lange link geplaatst wordt waar gebruik wordt gemaakt van een [url] of [url= code dan worden deze ook gewarpt... wat kan ik daar tegen doen?
ik heb nu bijvoorbeeld:
dat is erg moeilijk.rnmaar met een stack parser moet het lukkenrnhttppear.php.netpackageHTML_BBCodeParserrnrndie pas je dan aan, zodat hij in de [url] wrapt.
ik wil niet dat hij metrn[code]rn$bericht = Hallo [url=httpwww.tessssssssssssssssssssssst.nlditisdepagina.php]Bezoek mijn site[url]rn$bericht = msgview($bericht);rn[code]rndie url verziekt....rndat komt dus door mijn wordwarp functie...rner is toch wel een mogelijkheid om die [url] en [url= code met die wordwarp over te slaan ofnie
Thomas - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Moderator
Nope - op het sitemasters forum worden achtereenvolgens de volgende zaken uitgevoerd over [i]alle[i] berichtenrnrn- initialiseer variabelen bij forumcode-functiern- maak een backup van alle [code]-blokkenrn- maak een backup van hyperlinksrn- maak een backup van alle [url]-blokkenrnrn(op dit moment bevat een forum bericht alleen nog maar 'gewone' tekst)rn- voer hier wordwrap2, nl2br, htmlentities en watnogmeer uit op de overgebleven tekstrnrn- restore de [code]-blokkenrn- restore de [url]-blokkenrn- restore de hyperlinksrnrnEen backup van een code-blok of url-blok is gewoon een code-blok of url-blok waarin de codeurl vervangen is door een nummertje (index van een code-backup- url-backup-array). Na het wrappen zet je code en url weer terug op de oude plaats.
ik snap hier helemaal niks van S ik heb nog nooit veel gewerkt met arrays, tot nu toe heb ik dat ook nog niet echt hard nodig gehad om complete sites te scripten...rnrnzou je die backup iets meer kunnen uitleggen aub
Thomas - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Moderator
Wat je globaal doet is het volgendernrnje vervangt een url-blok (ik gebruik hier even [link][link] ipv [url], for obvious reasons) door [link]0[link] met behulp van een reguliere expressie. Die 0 duidt de index van een array aan waarin je link tijdelijk staan opgeslagen, bij het veranderen van [link]je_url[link] pik je dus ook je URL op uit dat link-blok en schrijf je die weg naar een array.rnDaarna gooi je nl2br(htmlentities(wordwrap())) en de hele meuk over je string - [link] 0 [link] blijft onveranderd. Daarna zet je de link terug als href, en wrap je alsnog het zichtbare deel (dat wat tussen aa staat).rnrnDusrn[link]je_url[link]rn gebruik hier een regexp die je_url opslaat in een array en de index van dat array terugzet in [link][link] (dit wordt nu dus bijvoorbeeld [link] 0 [link] (zonder spaties)rn voer nl2br() et al uitrn vervang [link] 0 [link] etc. door a href=link_array[0]wordwrap2(link_array[0])a (ook weer met een regexp)
sorry ik weet dat ik nu echt lastig begin te worden maar ik snap het nog steeds niet... zou je het misschien in een klein stukje code kunnen uitleggen $
Vrij simpel, je bewaart de url-blokjes in een variabelearray, je voert je wordwrap uit over je string en zet de variabelen weer terug.rnDas ff makkelijk uitgelegd...rnrn
[code]phprn wordwrap2rnfunction wordwrap2($str, $len, $cut) {rn $astr = explode( , $str);rn foreach($astr as $k = $v) {rn if(strlen($v) $len) {rn $astr[$k] = wordwrap($v, $len, $cut, 1);rn }rn }rnrn return implode( , $astr);rn}rnrnrn$links = array(); array waarin je links staan opgeslagenrnrnfunction backup_link(&$arr, $url) {rn $top = sizeof($arr); eerste vrije plaatsrn $arr[$top] = $url;rn rn getal wat we op de plaats van [url]...[url]rn opslaan om de link later te kunnen terugzettenrnrn zet [url]...[url] zelf ook weer terugrn rn return [url].$top.[url];rn}rnrnfunction restore_link(&$arr, $nr) {rn de href moet heel blijven - de hyperlink-text mag gewrapped wordenrn return a href=.$arr[$nr]..wordwrap2($arr[$nr], 30, ).a;rn}rnrnfunction ubb_meuk($text) {rn 'red' de linksrn $ret = preg_replace([url](.)[url]seU, backup_link($links, '1'), $text);rnrn rest van je ubbrn $ret = nl2br(htmlentities(wordwrap2($ret, 30, )));rnrn zet je links terugrn $ret = preg_replace([url](d+)[url]seU, restore_link($links, '1'), $ret);rnrn return $ret;rn}rnrnecho ubb_meuk(Dit is een test met een [url]www.helelangeurldienietgewrappedmagwordenbehalvedehyperlinktextdan.com[url].);rn[code]
als je een array hebt, kun je zo een element erachteraan plakkenrnrnrn$array[] = 'een nieuw element';rnrndan hoef het niet zo te doen rnrn$top = sizeof($arr); eerste vrije plaatsrn$arr[$top] = $url;rnrnEDITrnrn$
Thomas - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Moderator
Je moet toch weten [i]welke[i] (de hoeveelste) link dat is, anders weet je ook niet waar je hem terug moet zetten.rnrnOh ja.
maar hoe zit dat dan met [code][url=www.helelangeurldienietgewrappedmagwordenbehalvedehyperlinktextdan.com]De lange link naam[url][code]rnwant dan moet je 2 outputten opslaan en terug zetten...
Thomas - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Moderator
Twee outputten rnWatteuh rnrnNee man... je slaat het in je database op op de manier zoals je een bericht post, en je haalt dan de functie ubb_meuk() over die opgeslagen gegevens heen op het moment dat je ze afdrukt... scheelt je ook weer een hoop gedonder voor als je de berichten wilt editten
ik bedoel dus datrn[code]function ubb_meuk($text) {rn 'red' de linksrn $ret = preg_replace([url](.)[url]seU, backup_link($links, '1'), $text);rnrn rest van je ubbrn $ret = nl2br(htmlentities(wordwrap2($ret, 30, )));rnrn zet je links terugrn $ret = preg_replace([url](d+)[url]seU, restore_link($links, '1'), $ret);rnrn return $ret;rn}[code]rnalleen met [code] rn [url]www.link.nl[url]rn[code] werkt... hoe zit dat dan met [code] rn [url=httpwww.link.nl]link.nl[url]rn[code] rnrnde manier die je gebruikt om de link op te vangen is verschillend met die van mij... waarom en wat is jouw [url= versie dan dat werkt met deze functie
Thomas - 10/02/2005 10:47 (laatste wijziging 10/02/2005 10:47)
Moderator
Hiervoor schrijf je op dezelfde manier een restore_link(), en een backup_link() functie, waar bij je gebruik maakt van een ander array.
Links van de vorrm [url=] backup je voor links van de vorm [url] in de functie ubb_meuk(), omdat het anders in de soep loopt. Beide varianten links zet je terug nadat je nl2br(htmlentities(...)) and te like hebt uitgevoerd...
Enige eigen inventiviteit is nooit weg natuurlijk.
neee... ik kom e echt niet uit S ik weet dus echt niet hoe ik die [url= dan moet gaan opslaan... dit is wat ik geprobeerd hebrnrn[code] phprn wordwrap2rnfunction wordwrap2($str, $len, $cut) {rn $astr = explode( , $str);rn foreach($astr as $k = $v) {rn if(strlen($v) $len) {rn $astr[$k] = wordwrap($v, $len, $cut, 1);rn }rn }rnrn return implode( , $astr);rn}rnrnrn$links1 = array(); array waarin je links staan opgeslagenrn$links2 = array(); array waarin je links staan opgeslagenrnrnfunction backup_link(&$arr, $url) {rn $top = sizeof($arr); eerste vrije plaatsrn $arr[$top] = $url;rn rn getal wat we op de plaats van [url]...[url]rn opslaan om de link later te kunnen terugzettenrnrn zet [url]...[url] zelf ook weer terugrn rn return [url].$top.[url];rn}rnrnfunction restore_link(&$arr, $nr) {rn de href moet heel blijven - de hyperlink-text mag gewrapped wordenrn return a href=.$arr[$nr]..wordwrap2($arr[$nr], 30, ).a;rn}rnrnfunction ubb_meuk($text) {rn 'red' de linksrn $ret = preg_replace([url](.)[url]seU, backup_link($links1, '1'), $text);rn $ret = preg_replace([url=(.)](.)[url]seU, backup_link($links2, '1'), $text);rnrn rest van je ubbrn $ret = nl2br(htmlentities(wordwrap2($ret, 30, )));rnrn zet je links terugrn $ret = preg_replace([url](d+)[url]seU, restore_link($links1, '1'), $ret);rn $ret = preg_replace([url=(d+)](d+)[url]seU, restore_link($links2, '1'), $ret);rnrn return $ret;rn}rn rn rnecho ubb_meuk(Dit is een test met een [url]www.helelangeurldienietgewrappedmagwordenbehalvedehyperlinktextdan.com[url]. blabla bla [url=httpwww.www.wwww.wwww.wwwww.wwwww.wwww.test.nl]test.nl[url]);rn[code]rnrnmaar dat lukt niet echt dus... want die echo'd de 1e link als een niet-link en de 2e link wordt de eerste link S
Mja dit probleem kun je rustig isoleren van de rest he.rnJe hebt in de eerste plaats een reguliere expressie nodig die links van de vorm [url=] kan oppikken. Deze moet je tijdelijk wegschrijven naar een array met [i]per rij[i] [b]twee[b] velden (de url zelf, en de bijbehorende tekst - de 'key' van elke rij identificeert een link), en later zet je deze hyperlink weer terug met de url in het href-gedeelte, en de bijbehorende tekst tussen de aa tags...