login  Naam:   Wachtwoord: 
Registreer je!
 Forum

BB-Code probleem

Offline tswebdev - 19/11/2006 18:57 (laatste wijziging 19/11/2006 19:00)
Avatar van tswebdevPHP interesse Ik heb ff een functie gemaakt die bb-code omzet in html tags, maar het gedeelte van [url] werkt niet zoals ik het wil. Momenteel zet hij de [url] tag om naar <a href=\" en de [/url] tag zet hij om naar \">-Link-</a>. Dit geeft bv bij deze volgende invoer, de volgende html code.
http://index.php => <a href="index.php">-Link-</a>
Maar ik wil eigenlijk dit krijgen:
[url = index.php]index[/url] => <a href="index.php">index</a>
Maar ik weet niet hoe ik de code juist moet vormen. Kan iemand me hiermee helpen?

Hier is de volledige code, om een beter beeld te krijgen.

Invoer
  1. <?php
  2. if(isset($_POST['submit'])){
  3. $post= $_POST['post'];
  4. include('bb.php');
  5. $post2 = bb($post);
  6. echo $post2;
  7. } else {
  8. ?>
  9. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  10. <html xmlns="http://www.w3.org/1999/xhtml">
  11. <head>
  12. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  13. <title>Untitled Document</title>
  14. </head>
  15.  
  16. <body>
  17. <form action="index.php" method="POST">
  18. <textarea type="text" name="post" rows="10" cols="100">Tekst met BB-code</textarea>
  19. <input type="submit" name="submit" value="BB">
  20. <br>
  21. </body>
  22. </html>
  23. <?php
  24. }
  25. ?>


Functie
  1. <?php
  2. function bb($msg) {
  3. $msg = str_replace("[url]", "<a href=\"", $msg);
  4. $msg = str_replace("[/url]", "\">-Link-</a>", $msg);
  5. return $msg;
  6. }
  7. ?>

15 antwoorden

Gesponsorde links
Offline vinTage - 19/11/2006 19:19
Avatar van vinTage Nieuw lid
  1. $msg = str_replace("#\[url\](.*?)\[/url\]#i","<a href='\\1'>\\1</a>",$msg);
Offline tswebdev - 19/11/2006 19:28 (laatste wijziging 19/11/2006 19:30)
Avatar van tswebdev PHP interesse nogal onduidelijke code. En de code werkt niet
Meer uitleg gevraagd
Offline vinTage - 19/11/2006 19:29
Avatar van vinTage Nieuw lid gewoon copy pasten, of ga regex leren ;)
Offline tswebdev - 19/11/2006 19:30
Avatar van tswebdev PHP interesse Code werkt niet
Offline vinTage - 19/11/2006 19:30
Avatar van vinTage Nieuw lid wel in je functie zetten he..
Offline tswebdev - 19/11/2006 19:33
Avatar van tswebdev PHP interesse heb ik gedaan, de code werkt niet
Offline vinTage - 19/11/2006 19:33 (laatste wijziging 19/11/2006 19:35)
Avatar van vinTage Nieuw lid
  1. <?php
  2. $msg = '[url]www.vintagesworld.be[/url]';
  3. $msg = preg_replace("#\[url\](.*?)\[/url\]#i","<a href='\\1'>\\1</a>",$msg);
  4. echo $msg;
  5. ?>


test maar op een nieuw php bestandje..

edit, ff adres veranderd in deze code 
Offline tswebdev - 19/11/2006 19:37 (laatste wijziging 19/11/2006 19:39)
Avatar van tswebdev PHP interesse je begrijpt me verkeerd. Wat jij met je code doet kan ik ook, maar de bb-code: [url = index.php]index[/url] moet omgezet worden naar <a href="index.php">index</a>. Wat jij doet is dit:
http://index.php => <a href="index.php">index.php</a>
Offline vinTage - 19/11/2006 19:38 (laatste wijziging 19/11/2006 19:42)
Avatar van vinTage Nieuw lid ik had een fout gemaakt in mn eerste post, het moest preg ipv str zijn  


dit dan ?
  1. <?php
  2. $msg = '[url=vintagesworld.be]vintagesworld[/url]';
  3. $msg = preg_replace("#\[url=(.*?)\](.*?)\[/url\]#i","<a href='\\1'>\\2</a>",$msg);
  4. echo $msg;
  5. ?>
Offline tswebdev - 19/11/2006 19:42 (laatste wijziging 19/11/2006 19:42)
Avatar van tswebdev PHP interesse kijk als je hier op sima in je bericht dit zet:
[url = index.php]index[/url] (maar dan zonder spaties voor en na =)
dan krijg je dit:
index
dit wil ik dus ook verkrijgen
Offline vinTage - 19/11/2006 19:42 (laatste wijziging 19/11/2006 19:43)
Avatar van vinTage Nieuw lid zie edit hiervoor oftewel
  1. <?php
  2. $msg = '[url=vintagesworld.be]vintagesworld[/url]';
  3. $msg = preg_replace("#\[url=(.*?)\](.*?)\[/url\]#i","<a href='\\1'>\\2</a>",$msg);
  4. echo $msg;
  5. ?>

Offline Stijn - 19/11/2006 19:42 (laatste wijziging 19/11/2006 19:43)
Avatar van Stijn PHP expert
  1. <?php
  2. $msg = '[url]www.vintagesworld.be[/url]';
  3. $msg = preg_replace("#\[url=(.*?)\](.*?)\[/url\]#i","<a href='\\1'>\\2</a>",$msg);
  4. echo $msg;
  5. ?>

stijn

[edit]

te laat
Offline tswebdev - 19/11/2006 19:43 (laatste wijziging 19/11/2006 19:44)
Avatar van tswebdev PHP interesse Bedankt voor alle hulp en begrip  
Offline bosgroen - 19/11/2006 23:54 (laatste wijziging 19/11/2006 23:54)
Avatar van bosgroen Gouden medaille

PHP interesse
hou er wel rekening mee dat iemand javascript kan uitvoeren als je deze ubb-codes-pregreplacefunctions gebruikt. -> XSS-exploit (cookies en dus sessionid stelen met gevolg dat hij misschien wel kan inloggen als admin)
Offline Richard - 20/11/2006 08:12
Avatar van Richard Crew algemeen Pff, in plaats van dat iemand nou eens serieus regexes gaat leren maken op een efficiente manier, maar nee.

  1. <?php
  2. $msg = '[url=www.vintagesworld.be]blaat[/url]';
  3. $msg = preg_replace("~\[url=([^]]+)]([^[]+)\[/url]~i','<a href="$1">$2</a>', $msg);
  4. echo $msg;


Ziedaar, geen onnodige laziness (traag), escapes weg waar nutteloos. Maar: zoals bosgroen al zei, dit is nog steeds gevaarlijk ivm XSS, dus je kunt beter '[^]]+' vervangen door een regex die een url matcht ;)
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.232s