HTML naar UBB werkt niet helemaal

Status
Niet open voor verdere reacties.

jeroendenoot

Terugkerende gebruiker
Lid geworden
14 mrt 2005
Berichten
1.492
Hallo allemaal. Ik heb een gastenboek gemaakt met UBB-code. Dat werkt op zich goed, maar ik ben nu aan het maken dat ze het bericht ook weer kunnen aanpassen. Dit is een klein stukje van het script:

PHP:
$ubb = preg_replace('/<b>(.*)<\/b>/','[b ]\\\\1[/b ]',$html);

Dit werkt ook wel een beetje, maar als je dan meerder vetgedrukte stukjes hebt, dan werkt het niet.

Voorbeeld: Je hebt '<b>Dit</b> is een <b>test</b>', dan zou de UBB-code daarvan '[b ]Dit[/b ] is een [b ]test[/b ]' moeten zijn. Maar er '[b ] Dit</b> is een <b>test[/b ]'
Hij neemt dus alleen de buitenste. Hoe zorg ik dat dit goed komt?

P.S. Ik heb in de UBB-code spaties toegevoegd, omdat het anders niet goed wordt weergeven hier op Helpmij.nl. Die moet je maar wegdenken.
 
Laatst bewerkt:
Probeer dit eens:

$ubb = preg_replace( '/<b>(.*)<\/b>/Usi', '\[b\]\\1\[\/b\]', $html );



Ennuh, wellicht wil je nog eens nadenken over je databasemodel :)

Althans, ik gok dat dit voor een quote/editpagina van een zelfgemaakt forum/weblog/gastenboek is ...
 
Laatst bewerkt:
Probeer dit eens:

$ubb = preg_replace( '/<b>(.*)<\/b>/Usi', '\[b\]\\1\[\/b\]', $html );
Oké, maar wat betekend Usi?
Ennuh, wellicht wil je nog eens nadenken over je databasemodel
Databasemodel :confused: ?
Althans, ik gok dat dit voor een quote/editpagina van een zelfgemaakt forum/weblog/gastenboek is ...
Inderdaad, dat had ik al in mijn vorige bericht gezet.
 
Het vet[/b] niet vet [b]vet probleem was ik ook tegengekomen bij de WYSIWYG editor. :)

Is het niet handiger als je de reactie in ubb bewaard? Dan hoef je alleen maar te vertalen van database -> webpagina. Bij het aanpassen gebruik je dan de oorspronkelijke ubb-tekst weer.

/i is zonder onderscheid tussen hoofd- en kleine letters: Pattern Modifiers.

Je hoeft je ook geen zorgen te maken over ontbrekende eind-tags bij het (terug)vertalen van html naar ubb. Met
Code:
$ubb = preg_replace( '/<(\/?)b>/i', '\[$1b\]', $html );
oid :), kan je de meeste tags samen vertalen.


Vr.Gr. Egel.
 
Laatst bewerkt:
Geplaatst door jeroendenoot
Oké, maar wat betekend Usi?
Pattern modifiers. U voor greedyheid omdraaien, s voor ondersteuning over meerdere regels, i voor hoofdletterongevoeligheid.
Databasemodel :confused: ?
Je database-opzet. De opzet van je database. Je weet wel, je tabellen met de kolommen en de relaties tussen de tabellen onderling ?
Inderdaad, dat had ik al in mijn vorige bericht gezet.
Ik lees graag over het onnodige geblaat heen :p
 
Geplaatst door jeroendenoot
Uhm, en wat betekend greedyheid? (Sorry, dat ik al die termen niet ken, maar vragen lijkt mij het beste ;) .)
Ik weet niet exact hoe het nou precies werkt, kan 't ook niet uitleggen. Kan wel een voorbeeldje geven, waarvan je zelf even mag testen door die U dan wel weer in preg_replace() te zetten en dan weer niet :)

Het bericht waar je ff mee mag testen:
<b>bla<b>bla</b>bla<b>bla</b>bla</b>
 
'Greedy' betekent inhalig of hebberig, 'un' betekent niet. Standaard probeert het zoveel mogelijk tekst te matchen, met /U pakt het de eerste/kortste match en daarna de volgende.
Code:
$ubb = preg_replace( '/<(\/?)(b|i|u)>/i', '\[$1$2\]', $html );
(Php fouten voorbehouden.)

Voor </div> heb je de /U wel nodig. :)


Vr.Gr. Egel.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan