login  Naam:   Wachtwoord: 
Registreer je!
 Forum

ubb + afkorten

Offline lau - 12/08/2005 14:49 (laatste wijziging 12/08/2005 14:49)
Avatar van lauHTML interesse Ik heb hieronder een stukje code dat niet helemaal lekker loopt:
  1. <?php
  2. while($res = mysql_fetch_assoc($sql)) {
  3. echo '<div id="text"><img src="images/bullet.gif" alt="" width="9" height="7" border="0" /> <strong>'. stripslashes($res['titel']) . '</strong> <br />';
  4. echo short(ubb($res['bericht']), 70);
  5. echo '<br /> [ <a href="' . $_SERVER['PHP_SELF'] . '?p=b&amp;id=' . $res['id'] . '&amp;c=1">Lees meer</a> ]</div>';
  6. }
  7. ?>

Het is een ubb functie binnen een short (afkorten) functie. Alles werkt prima, maar dan geeft de output het volgende:

  1. <div id="text"><img src="images/bullet.gif" alt="" width="9" height="7" border="0" /> <strong>Introductieweek</strong> <br /><div class='TT13'>test..<br /> [ <a href="#">Lees meer</a> ]</div>


Je ziet dus dat het een </div> mist na <div class='TT13'>. Want die laatste </div>is van <div id="text">. Dit komt omdat ik die hele bericht heb ingekort naar 70 tekens en komt dus het einde van die bericht er niet op wat dus ubb code zou zijn.

Hoe moet ik dit oplossen? Dat als je ubb code gebruikt er automatisch een </div> achter komt na die afkortfunctie. En als je geen ubb code gebruikt, dat ie dus geen </div> toevoegd achter het bericht.

Misschien handig om te weten: het zit zo in de database:
  1. [size=13]Test balablaldlasfjd;lajf;oaiejfo ;asdjfljasd;ofasdf[/size]

En dit wordt dus omgezet door ubb functie naar
  1. <div class='TT13'>test..<br />


Ik weet.. het voorbeeld is nog lang geen 70 tekens.. maar het is een voorbeeld.

4 antwoorden

Gesponsorde links
Offline Thomas - 12/08/2005 15:14
Avatar van Thomas Moderator Het komt bij mij over alsof de functie short() wel "<div class='TT13'>" toevoegt, maar geen "</div>", of zie ik dit verkeerd ? Het lijkt mij (dus) een kwestie van het aanpassen van de short()-functie ?
Offline lau - 12/08/2005 15:19
Avatar van lau HTML interesse Hmm... klopt zich wel, maar dat komt omdat de short()-functie 70 tekens haalt uit de database. En daar zit in het begin "[size=13]Test" dat door ubb wordt omgezet naar "<div class='TT13'>". En omdat het bericht in de database langer is dan 70 tekens, haalt hij het einde niet meer op en plaats hij ook geen "[/size]" wat dus betekend dat er ook geen "</div>" aan het eind wordt geplaats bij die short()-functie.

Nu wil ik dat die dat wel doet ALS het bericht gebruik maakt van ubb, dus met [size=xx] etc. En ik wil dat hij geen "</div>" achter plakt als ik geen ubb gebruikt. Want dan is er weer een "</div>" teveel.
Offline Fenrir - 12/08/2005 15:27 (laatste wijziging 12/08/2005 15:28)
Avatar van Fenrir PHP expert De meeste UBB-Problemen worden automatisch opgelost als je een stack-parser gebruikt. Een stack-parser gebruikt niet gewoon reguliere expressies om UBB te parsen, maar kijkt naar de structuur.

Als je dit hebt:

  1. bla1
  2. [font size="13"]bla2[/font]
  3. bla3


Dan wordt dit zo in een array geparsed:

  1. <?php
  2. 0 => array('type' => UBB_TEXT, 'text' => 'bla1'),
  3. 1 => array('type' => UBB_NODE_OPEN, 'tag' => 'font', 'attributes' => array('size' => '13')),
  4. 2 => array('type' => UBB_TEXT, 'text' => 'bla2'),
  5. 3 => array('type' => UBB_NODE_CLOSE, 'tag' => 'font'),
  6. 4 => array('type' => UBB_TEXT, 'text' => 'bla13')
  7. )
  8. ?>


Op deze manier kun je de structuur controleren, en als er sluittags missen ze erbij zetten.
Offline lau - 12/08/2005 15:30 (laatste wijziging 12/08/2005 17:11)
Avatar van lau HTML interesse Oef.. maar dat snap ik niet zo..
Heb je ook een manier op mijn methode? 

Weet iemand een functie die midden in de tekst op hele woorden afkort zoiets als:
hallo ... jazeker

Dan kan het volgens mij wel met die </div> achter. Die neemt hij gewoon mee.

[edit]
heb het nu wat omslachtig gedaan. met een if-else gekeken of het begin stuk hetzelfde is als [size en dan een echo met </div> achter. Als dat niet zo is, geen div achter..
maar ach.. tis een oplossing.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.232s