[PHP] UBB parser en witregels

Pagina: 1
Acties:

  • Markje_X
  • Registratie: Maart 2000
  • Laatst online: 29-10-2014

Markje_X

a.k.a. Olthuis

Topicstarter
Wij zijn bezig met de ontwikkeling van een nieuwe website voor de SKON, wij
maken hierin gebruik van een UBB parser, we werken namelijk met PHP en
MySQL.

Alleen werkt de UBB parser niet goed :(

Hij maakt namelijk de volgende fouten:

Voor een opsomming en na een opsomming komt twee witregels ipv van één
witregel
Wanneer er html wordt gepost, wordt het aantal html regels eerst als
witregels weergegeven en daarna pas de html
Voor en na een quote komen ook twee ritregels!

Onze ubb.php is als volgt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?
function UBB($bericht, $imagesEnabled, $link)
{
 if ( $imagesEnabled )
 {
  $query = "SELECT * from afbeeldingen WHERE ";

  preg_match_all ("/\[img=(.*?)\]/si", $bericht, $afbeeldingIdArray);
  foreach ($afbeeldingIdArray[1] as $afbeeldingId)
  {
   $query = $query." id='$afbeeldingId' OR";
  }
  $query = $query." 0";

  $result = mysql_query($query, $link);
  while ($record = mysql_fetch_array($result))
  {
   $afbeeldingId = $record["id"];
   $type = $record["type"];
   $hoogte = $record["hoogte"];
   $breedte = $record["breedte"];
   $imgTag="<img src=\"../../images/$afbeeldingId.$type\" vspace=\"10\"
align=\"right\" width=\"$breedte\" height=\"$hoogte\">";
   $bericht = str_replace("[img=$afbeeldingId]", $imgTag, $bericht);
  }

  $bericht= preg_replace("/\\[img\]http:\/\/(.*?)\\[\/img\]/", "<img
src=\"http://\\1\"  vspace=\"10\" align=\"right\">", $bericht);
 }

 $UBB_pattern = array (
                    "/\\[quote\](.*?)\\[\/quote\]/si",
//quote
                    "/\\[list\](.*?)\\[\/list\]/si",
//bolletjeslijst
                    "/\[list=1\](.*?)\\[\/list\]/si",
//cijfertjeslijst
                    "/\\[\*\]/",
//item
                    "/\\[b\](.*?)\\[\/b\]/si",
//vetdrukken
                    "/\\[u\](.*?)\\[\/u\]/si",
//onderstrepen
                    "/\\[i\](.*?)\\[\/i\]/si",
//schuindrukken
                    "/\\[kop\](.*?)\\[\/kop\]/si",   //Kop volgens StyleSheet
                    "/\\[url\](.*?)\\[\/url\]/si",
//hyperlink simpel
                    "/\[url=http:\/\/(.*?)\](.*?)\\[\/url\]/si",
//hyperlink advanced
                    "/\\[email\](.*?)@(.*?)\\[\/email\]/",
//email simpel
                    "/\[email=(.*?)@(.*?)\](.*?)\\[\/email\]/si",
//email advanced
                    "/\r\n/"
                    );
 $HTML_pattern = array (
                    "<blockquote>Quote:<hr>\\1[/quote]",
                    "<ul>\\1</ul>",
                    "<ol>\\1</ol>",
                    "<li>",
                    "<b>\\1</b>",
                    "<u>\\1</u>",
                    "<i>\\1</i>",
                    "<font class=\"titel2\">\\1</font>",
                    "<a href=\"\\1\" target=\"_blank\">\\1</a>",
                    "<a href=http://\\1 target=\"_blank\">\\2</a>",
                    "<a href=\"mailto:\\1@\\2\">\\1@\\2</a>",
                    "<a href=\"mailto:\\1@\\2\">\\3</a>",
                    "<br>\r\n"
       );

 $bericht = preg_replace($UBB_pattern,$HTML_pattern,$bericht);

 return($bericht);
}

print $bericht;
?>

Waar ligt de fout? Zodat die witregel wel gewoon wordne weergegeven?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

een newline character komt niet voor in de reeks die door . wordt weergegeven.
Vervang .* dus door (.|\n)*

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Markje_X
  • Registratie: Maart 2000
  • Laatst online: 29-10-2014

Markje_X

a.k.a. Olthuis

Topicstarter
Op vrijdag 07 december 2001 14:22 schreef drm het volgende:
een newline character komt niet voor in de reeks die door . wordt weergegeven.
Vervang .* dus door (.|\n)*
HEb ik gedaan daardoor verandert er niets aan de witregels! Alleen worden nu de URL's en Email adressen niet meer goed weergegeven, als ik die verandering doorvoer is de code als volgt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?
function UBB($bericht, $imagesEnabled, $link)
{
    if ( $imagesEnabled )
    {
        $query = "SELECT * from afbeeldingen WHERE ";
    
        preg_match_all ("/\[img=(.*?)\]/si", $bericht, $afbeeldingIdArray);
        foreach ($afbeeldingIdArray[1] as $afbeeldingId)
        {
            $query = $query." id='$afbeeldingId' OR";
        }
        $query = $query." 0";
        
        $result = mysql_query($query, $link);
        while ($record = mysql_fetch_array($result))
        {
            $afbeeldingId = $record["id"];
            $type = $record["type"];
            $hoogte = $record["hoogte"];
            $breedte = $record["breedte"];
            $imgTag="[img]\"../../images/$afbeeldingId.$type\"[/img]";
            $bericht = str_replace("[img=$afbeeldingId]", $imgTag, $bericht);
        }
            
        $bericht= preg_replace("/\\[img\]http:\/\/(.*?)\\[\/img\]/", "[img]\"http://\\1\"[/img]", $bericht);
    }
    $UBB_pattern = array ( 
                    "/\\[quote\]((.|\n)*?)\\[\/quote\]/si",                      //quote 
                    "/\\[list\]((.|\n)*?)\\[\/list\]/si",                        //bolletjeslijst 
                    "/\[list=1\]((.|\n)*?)\\[\/list\]/si",                      //cijfertjeslijst
                    "/\\[\*\]/",                                          //item 
                    "/\\[b\]((.|\n)*?)\\[\/b\]/si",                            //vetdrukken 
                    "/\\[u\]((.|\n)*?)\\[\/u\]/si",                            //onderstrepen 
                    "/\\[i\]((.|\n)*?)\\[\/i\]/si",                            //schuindrukken
                    "/\\[kop\]((.|\n)*?)\\[\/kop\]/si",            //Kop volgens StyleSheet
                    "/\\[url\]((.|\n)*?)\\[\/url\]/si",                        //hyperlink simpel 
                    "/\[url=http:\/\/((.|\n)*?)\]((.|\n)*?)\\[\/url\]/si",         //hyperlink advanced 
                    "/\\[email\]((.|\n)*?)@((.|\n)*?)\\[\/email\]/",                //email simpel 
                    "/\[email=((.|\n)*?)@((.|\n)*?)\]((.|\n)*?)\\[\/email\]/si",         //email advanced
                    "/\r\n/" 
                    ); 
    $HTML_pattern = array ( 
                    "<blockquote>Quote:<hr>\\1[/quote]", 
                    "<ul>\\1</ul>", 
                    "<ol>\\1</ol>", 
                    "<li>",
                    "<b>\\1</b>", 
                    "<u>\\1</u>", 
                    "<i>\\1</i>",
                    "<font class=\"titel2\">\\1</font>",
                    "<a href=\"\\1\" target=\"_blank\">\\1</a>", 
                    "<a href=http://\\1 target=\"_blank\">\\2</a>", 
                    "<a href=\"mailto:\\1@\\2\">\\1@\\2</a>", 
                    "<a href=\"mailto:\\1@\\2\">\\3</a>",
                    "<br>\r\n"
             ); 
            
    $bericht = preg_replace($UBB_pattern,$HTML_pattern,$bericht);
    
    return($bericht);
}

print $bericht;
?>

Of heb ik het verkeerd begrepen :?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

hmm kan je een kort voorbeeld van in- en output geven?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Markje_X
  • Registratie: Maart 2000
  • Laatst online: 29-10-2014

Markje_X

a.k.a. Olthuis

Topicstarter
Ik neem aan dat je de URL bedoelt? Of de code?

Verwijderd

url, waar we kunnen zien wat je precies bedoelt, een voorbeeld, het liefst ook welke tags je gebruikt (ubb)

  • Markje_X
  • Registratie: Maart 2000
  • Laatst online: 29-10-2014

Markje_X

a.k.a. Olthuis

Topicstarter
Dit plaatje laat zien hoe het bericht wordt weergegeven!

Afbeeldingslocatie: http://www.marganza.nl/ubb.gif

  • Markje_X
  • Registratie: Maart 2000
  • Laatst online: 29-10-2014

Markje_X

a.k.a. Olthuis

Topicstarter
De code zoals die in de database staat:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Dit is een artikel dat speciaal geschreven is om de ubb parser te testen.

Met ubb kun je opmaak aan een tekst geven zonder daarbij html code te 'gebruiken'. Je kunt dit simpel doen door de speciale ubb opmaakcodes te gebruiken. [b]dit stukje tekst is vet[/b], [i]dit is cursief[/i] en [u]dit is onderstreept[/u] maar je kunt natuurlijk ook combinaties gebruiken: [u][b][i]alles tegelijk![/u][/b][/i]

Als je nog vragen hebt kun je altijd [email=raymond@friendly.net]mailen[/email]
Dat emailadres kun je trouwens ook zo schrijven [email]raymond@friendly.net[/email]

Dit is een heel erg leuke website: [url]http://www.tweakers.net[/url]
en deze ook: [url=http://www.splash-boat.com]Roel Wester's website[/url]

Natuurlijk kun je ook nog gewoon html gebruiken.. bijvoorbeeld voor het plaatsen van een tabelletje:

<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
  <tr>
    <td width="50%"> </td>
    <td width="50%"> </td>
  </tr>
  <tr>
    <td width="50%"> </td>
    <td width="50%"> </td>
  </tr>
</table>

[kop]Dit is een kopje voor de volgende alinea[/kop]

In deze alinea kun je een tweetal opsommingslijstjes vinden. Één met bolletjes en één met cijfers.
[list]
[*]Dit is optie 1
[*]Dit is optie 2
[*]Optie 3 is ook wel [b]VET[/b]!!
[*]Dit was alweer het laatste bolletje :-)
[/list]
Datzelfde kunnen we natuurlijk ook doen met nummertjes:
[list=1]
[*]Dit is optie 1 met nummer 1!
[*]Dit is optie 2 met nummer 2!
[*]Optie 3 is ook wel [b]VET[/b]!!
[*]Dit was alweer het laatste puntje met nummer 4! :-)
[/list]

[quote]
Dit is een gequote stukje tekst.
[/quote]
Ben ik nog wat vergeten? Ohja... plaatjes. Hier een extern plaatje
[img]http://www.splashclass.org/plaatjes/frontpage_2001_2.jpg[/img]

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op vrijdag 07 december 2001 16:19 schreef Mark Olthuis het volgende:
Deze URL verwijst naar een proefbericht waar alle tags inzitten!

[acm-wegedit]
Zou je die niet eens wat dicht zetten? leuk hoor dat phpmyadmin..

  • Markje_X
  • Registratie: Maart 2000
  • Laatst online: 29-10-2014

Markje_X

a.k.a. Olthuis

Topicstarter
Ja eigenlijk moet dat wel! Maar goed ik zou niet weten hoe dat moet momenteel zo snel! Ik maak er wel een image van!

Wij draaien namelijk bij vuurwerk en ontwikkellen offline zeg maar !

Beste Nielsz zou je even die URL uit je bericht kunnen halen? Alvast bedankt!

Verwijderd

Tis gewoon een kwestie van even goed nadenken welke newlines je niet met br wilt vervangen (na een [ quote], voor een [ /quote], etc.). Die haal je dan gewoon weg.

Zou ik in principe wel doen voor je het in de database zet, dat scheelt weer load enzo.

  • Markje_X
  • Registratie: Maart 2000
  • Laatst online: 29-10-2014

Markje_X

a.k.a. Olthuis

Topicstarter
Op vrijdag 07 december 2001 16:29 schreef fladder het volgende:
Tis gewoon een kwestie van even goed nadenken welke newlines je niet met br wilt vervangen (na een [ quote], voor een [ /quote], etc.). Die haal je dan gewoon weg.

Zou ik in principe wel doen voor je het in de database zet, dat scheelt weer load enzo.
Ik begrijp het niet helemaal! Wat bedoel je precies met voor in de database zetten? Er staat al heel weinig in de database!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op vrijdag 07 december 2001 16:28 schreef Mark Olthuis het volgende:
Beste Nielsz zou je even die URL uit je bericht kunnen halen? Alvast bedankt!
Als nielsz het niet doet ... :)

  • Markje_X
  • Registratie: Maart 2000
  • Laatst online: 29-10-2014

Markje_X

a.k.a. Olthuis

Topicstarter
Wordt het hoogtijd, om die shit te gaan beveiligen!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Het lijkt er meer op dat dit aan de stylesheet ligt...

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Kan je misschien ook het kleine stukje code mailen dat * omzet in de bolletjes?
Pagina: 1