login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Geen WordWarp bij ubb code: url

Offline Hendry - 08/02/2005 00:56 (laatste wijziging 08/02/2005 01:02)
Avatar van HendryHTML interesse ik gebruik dit mooie wordwarp script:
  1. <?
  2. function wordwrap2($str, $len=30, $cut=" ") {
  3. $astr = explode(" ", $str);
  4. foreach($astr as $k => $v) {
  5. if(strlen($v) > $len) {
  6. $astr[$k] = wordwrap($v, $len, $cut, 1);
  7. }
  8. }
  9. ?>

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:
  1. <?
  2. function msgview($msg)
  3. {
  4. $msg = wordwrap2($msg);
  5. $msg = stripslashes($msg);
  6. $msg = htmlspecialchars($msg);
  7. $msg = nl2br($msg);
  8. $msg = eregi_replace("\\[url=([^\\[]*)\\]([^\\[]*)\\[/url\\]","<a href=\\1 target=_blank>\\2</a>",$msg);
  9. $msg = preg_replace("/\[url\](?U)((.|\n|\r)*)\[\/url\]/", "<a href=\\1 target=_blank>\\1</a>", $msg);
  10. return $msg;
  11. }
  12. ?>

18 antwoorden

Gesponsorde links
Offline Fenrir - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van Fenrir PHP expert 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.
Offline Hendry - 30/11/1999 00:00
Avatar van Hendry HTML interesse 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
Offline Thomas - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van Thomas 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.
Offline Hendry - 30/11/1999 00:00
Avatar van Hendry HTML interesse 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
Offline Thomas - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van Thomas 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)
Offline Hendry - 30/11/1999 00:00
Avatar van Hendry HTML interesse 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 $
Offline Gml - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van Gml HTML beginner 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
Offline Hendry - 30/11/1999 00:00
Avatar van Hendry HTML interesse ik had zoiets al geprobeerd maar dan kreeg ik het hele bericht dubbel te zien... S
Offline Hendry - 30/11/1999 00:00
Avatar van Hendry HTML interesse oke $ alvast bedankt!rnen als iemand anders me ook nog kan helpen of een andere weg kent voor mijn probleem ofz... reageer dan aub $
Offline Thomas - 30/11/1999 00:00
Avatar van Thomas Moderator [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]
Offline Fenrir - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van Fenrir PHP expert 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$
Offline Thomas - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van Thomas 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.
Offline Hendry - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van Hendry HTML interesse 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...
Offline Thomas - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van Thomas 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
Offline Hendry - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van Hendry HTML interesse 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
Offline Thomas - 10/02/2005 10:47 (laatste wijziging 10/02/2005 10:47)
Avatar van Thomas 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.
Offline Hendry - 30/11/1999 00:00
Avatar van Hendry HTML interesse 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
Offline Thomas - 30/11/1999 00:00
Avatar van Thomas Moderator 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...
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.252s