[PHP]magic_urls en bbcode urls

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Tjolk
  • Registratie: Juni 2007
  • Laatst online: 12:07
Ik ben voor mezelf bezig een kladbloksysteempje te schrijven. Dit enerzijds met het doel om de talloze mails die ik naar mezelf verstuur te vervangen, anderzijds omdat ik nog nooit van de grond af een compleet systeem heb geschreven en dat me gewoon leuk lijkt (en daarom wil ik dus niet een bestaand systeem gebruiken).
De basics van het systeem had ik vrij vlot voor elkaar, en nu wil ik wat extra's toevoegen. Ik had voor het gemak al een magic url functie gemaakt, nu wil ik ook BBcode toevoegen. De basics daarvan zijn simpel, maar ik loop nu tegen een probleem aan bij de url-BBcode. Doordat ik met de magic_url al alle valide links omzet, verpest dat de urls die ik met BBcode invoer (en andersom zou hetzelfde gebeuren).

Wat is een handige manier om dit aan te pakken? Ter info, hier mijn magic_url functie:
PHP:
1
2
3
4
5
$magic_url=array(
    '#((?:https?|ftp)://\S+[A-Za-z0-9-]+/?)#si'     => '<a href="$1">$1</a>',
    '#((?<!//)(www\.\S+[A-Za-z0-9-]+/?))#si'    => '<a href="http://$1">$1</a>'
);
$bericht = preg_replace(array_keys($magic_url), array_values($magic_url), $bericht);

Tjolk is lekker. overal en altijd.


Acties:
  • 0 Henk 'm!

  • Mad Marty
  • Registratie: Juni 2003
  • Laatst online: 13:49

Mad Marty

Je bent slimmer als je denkt!

Misschien een stomme vraag hoor, maar waarom wil je allebei? Je kan toch voor één van de twee kiezen? En anders lijkt het me dat je gewoon moet checken of er een BBcode voor staat, zo ja, dan pas je 'm niet aan, zo nee, dan pas je 'm wel aan.

Rail Away!


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 10:43

Matis

Rubber Rocket

Wat is er mis met TinyMCE.

Je kan altijd nog uit die Javascriptfiles de vertaalslag plukken om van html naar rml/ubb te gaan!

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Tjolk
  • Registratie: Juni 2007
  • Laatst online: 12:07
Mad Marty schreef op dinsdag 28 april 2009 @ 08:27:
Misschien een stomme vraag hoor, maar waarom wil je allebei? Je kan toch voor één van de twee kiezen?
Ik wil beide, omdat ik vind dat een compleet systeem beide moet ondersteunen. Natuurlijk werkt het ook met één van beide, maar dat vind ik niet genoeg. :)
Mad Marty schreef op dinsdag 28 april 2009 @ 08:27:
En anders lijkt het me dat je gewoon moet checken of er een BBcode voor staat, zo ja, dan pas je 'm niet aan, zo nee, dan pas je 'm wel aan.
Ja, ik heb zitten stoeien met een look-behind, maar om de een of andere reden heeft dat geen effect. Blijkbaar doe ik toch iets verkeerd in het patroon dan...
Niets, behalve dan dat ik alles vanaf de grond af met eigen code wil doen.

Tjolk is lekker. overal en altijd.


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Hartstikke tof dat je alles compleet zelf wil maken maar bedenk je (wellicht niet voor je project nu) dat anderen er soms net even wat beter over nagedacht hebben dan jijzelf in je eentje. Het gebruiken van opensource projecten is echt geen schande imo, integendeel... het bespaart je een enorme bak tijd en dus geld ;) Vaak zit er ook een goede userbase achter die testen en bugs reporten zonder dat jij of je klant daar iets voor hoeft te doen.

Wil nogmaals duidelijk maken dat ik nu niet wil zeggen dat je het niet zelf moet maken, denk er eens aan bij een volgend project.

Acties:
  • 0 Henk 'm!

  • Tjolk
  • Registratie: Juni 2007
  • Laatst online: 12:07
Oh, zeker, over het algemeen genomen heb je natuurlijk gelijk (dat roep ik zelf ook vaak). Dit is echter puur hobbyen. En met hobby's is de weg naar het resultaat het leukste. Je gaat van je favoriete computerspel ook niet een savegame downloaden waarbij je alleen nog maar door de laatste deur heen moet. ;)

Tjolk is lekker. overal en altijd.


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 10:43

Matis

Rubber Rocket

SFB schreef op dinsdag 28 april 2009 @ 09:58:
Oh, zeker, over het algemeen genomen heb je natuurlijk gelijk (dat roep ik zelf ook vaak). Dit is echter puur hobbyen. En met hobby's is de weg naar het resultaat het leukste. Je gaat van je favoriete computerspel ook niet een savegame downloaden waarbij je alleen nog maar door de laatste deur heen moet. ;)
Daar heb je gelijk in, immers is zelf ontdekken/doen leuker dan alles aangedragen krijgen, maar even als vergelijk. TinyMCE heeft alleen al voor zijn conversie 13000 regels code. (nu is dat natuurlijk top-of-the-bill, maar ik wilde het toch even noemen).

Op te reageren op je TS, je moet deterministisch door je text heen. Ik weet niet wat je allemaal in je kladblok wilt zetten, maar ik heb ooit ook in php een formpje gemaakt waarmee ik (middels TinyMCE) van excel naar rml (hier voor op GoT) kon. Ik heb TinyMCE alle text laten omzetten en ikzelf heb toen nog de atributen op de juiste volgorde gezet (zodat GoT het snapt ;) ).

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

toaomatis schreef op dinsdag 28 april 2009 @ 10:08:
[...]

Ik heb TinyMCE alle text laten omzetten en ikzelf heb toen nog de atributen op de juiste volgorde gezet (zodat GoT het snapt ;) ).
offtopic:
Je weet dat RML ook [tag attr2="waarde" attr1="waarde"] syntax ondersteund? ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 10:43

Matis

Rubber Rocket

crisp schreef op dinsdag 28 april 2009 @ 10:24:
[...]

offtopic:
Je weet dat RML ook [tag attr2="waarde" attr1="waarde"] syntax ondersteund? ;)
Jazeker, maar ik heb toen de RML syntax [tagname=value1,value2] content [/tagname] aangehouden, om het een beetje moeilijk voor mezelf te maken ;)

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

toaomatis schreef op dinsdag 28 april 2009 @ 10:08:
[...]


Daar heb je gelijk in, immers is zelf ontdekken/doen leuker dan alles aangedragen krijgen, maar even als vergelijk. TinyMCE heeft alleen al voor zijn conversie 13000 regels code. (nu is dat natuurlijk top-of-the-bill, maar ik wilde het toch even noemen).
TinyMCE is dan ook nét even iets gecompliceerder dan hetgeen de topicstarter wil. Een stackbased parser (met tokenizer en state machine) implementatie kun je gewoon door de string heen laten loopen en op basis van de context verschillende dingen doen met dezelfde tekst.

Overigens vind ik het vrij triest dat er nog steeds mensen zijn die roepen dat de TS maar een kant-en-klaar-product moet gebruiken ondanks dat hij in de topicstart netjes aangeeft waarom hij het wiel opnieuw aan het uitvinden. Je gaat iemand die problemen heeft met zijn fiets en om hulp vraagt toch ook niet vertellen dat hij beter de auto kan pakken in plaats van de fiets te repareren? :?

[ Voor 23% gewijzigd door NMe op 28-04-2009 10:38 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
NMe, dan heb je niet goed gelezen want dat zei ik helemaal niet. Mits je ook doelt op mijn post natuurlijk.

Acties:
  • 0 Henk 'm!

  • Tjolk
  • Registratie: Juni 2007
  • Laatst online: 12:07
Update: ik had inderdaad een fout gemaakt in de pattern, waardoor het niet werkte. Voor de liefhebbers hier mijn BBcode tot zover:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$bbcode = array(
    '#\[(left|right|center)\](.+?)\[/$1\]#is'           => '<div align="$1">$2</div>',
    '#\[b](.+?)\[/b]#is'                        => '<strong>$1</strong>',
    '#\[i](.+?)\[/i]#is'                        => '<em>$1</em>',
    '#\[u](.+?)\[/u]#is'                        => '<span style="text-decoration: underline;">$1</span>',
    '#\[s](.+?)\[/s]#is'                        => '<span style="text-decoration: line-through;">$1</span>',
    '#\[color=([^\]]+)\](.+?)\[/color\]#is'             => '<span style="color:$1">$2</span>',
    '#\[background=([^\]]+)\](.+?)\[/background\]#is'       => '<span style="background-color:$1">$2</span>',
    '#(?<!\[url.{1})((?:https?|ftp)://\S+[A-Za-z0-9-]+/?)#is'   => '<a href="$1">$1</a>', //magic_url met http
    '#(?<!\[url.{1})((?<!//)(www\.\S+[A-Za-z0-9-]+/?))#is'      => '<a href="http://$1">$1</a>', //magic_url zonder http
    '#\[url=www(.+?)\](.+?)\[\/url\]#is'                => '<a href="http://www$1">$2</a>', //url= bbcode zonder http
    '#\[url=(.+?)\](.+?)\[\/url\]#is'               => '<a href="$1">$2</a>', //url= bbcode met http
    '#\[url]www(.+?)\[\/url\]#is'                   => '<a href="http://www$1">www$1</a>', //url bbcode zonder http
    '#\[url](.+?)\[\/url\]#is'                  => '<a href="$1">$1</a>', //url bbcode met http
);

$bericht = preg_replace(array_keys($bbcode), array_values($bbcode), $bericht);

Lijstje, afbeeldingen etc. ben ik nog niet aan begonnen. Maar tot nu toe heb ik het nog lekker simpel weten te houden. :)

[ Voor 7% gewijzigd door Tjolk op 28-04-2009 11:46 . Reden: Kwam zojuist nog een foutje tegen in de code, aangepast ]

Tjolk is lekker. overal en altijd.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Doe deze eens: [color=red]foo [color=blue]bar[/color] quux[/color]. Iets zegt me dat je dan niet foo bar quux gaat terugzien als resultaat. :P

Al kan het natuurlijk best zijn dat je dat ook niet wil. Voor geneste quotes, als je die wil ondersteunen, is het iets minder simpel om af te handelen. ;)

[ Voor 21% gewijzigd door NMe op 28-04-2009 11:29 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Tjolk
  • Registratie: Juni 2007
  • Laatst online: 12:07
NMe schreef op dinsdag 28 april 2009 @ 11:29:
Doe deze eens: [color=red]foo [color=blue]bar[/color] quux[/color]. Iets zegt me dat je dan niet [color=red]foo [color=blue]bar[/color] quux[/color] gaat terugzien als resultaat. :P
Inderdaad, dat gaat mis. Het is een klein risico (wat van bovenstaand lijstje eigenlijk alleen maar bij de kleuren en background zal voorkomen), maar het kan inderdaad. Ik ben er nog niet direct uit hoe ik dat handig kan fixen eigenlijk...

Tjolk is lekker. overal en altijd.


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Dan kom je al snel uit op de zoekterm "stackbased parser" zoals NMe dat al omschreef net :)
Pagina: 1