Ik ben bezig met een blog en stuitte daarbij op een vervelend probleem. Wanneer een tag niet goed is afgesloten, weigert Firefox het reactieformulier te tonen. Via een eenvoudig scriptje wordt UBB omgezet in HTML. Kan zijn dat iemand bijv. een onschuldige bold-tag vergeet af te sluiten. Zeker wanneer iemand meerdere keren een link of bold tag gebruikt wordt het lastig om dat te controleren (voor mij dan).
Is er geen goede functie om alle tags alsnog te sluiten?
Wanneer je met strip_tags of htmlentities gaat werken verdwijnen de tags of de werking van de tags en dat is ook geen oplossing.
Ik neem uit je post aan dat je niet met een ubb (zoals [ignore]dit is vette tekst[/ignore]) werkt? Dit zou ik je wel aanraden. Dan heb je zelf precies de controle wat er aan html binnenkomt. Goed veilig vooral :)
Input is inderdaad met UBB vooraf.
Bij het tonen van het bericht wordt UBB omgezet in de bijbehorende HTML code. " tekst " wordt dus "<b> tekst </b>" etc.
Alleen kan het voorkomen dat om een bepaalde reden een tag niet goed afgesloten is/wordt. Openingstag wordt wel omgezet, maar kan vervolgens niet gesloten worden.
tel gewoon hoevaak elke tag voorkomt count(preg_match_all()) en tel hoevaak elke tag gesloten wordt.
Als het verschil 0 is is het goed.
Anders meot je de tags nog toevoegen. Maar als je geen overlappende tags ([ignore]dsa[/ignore]) wilt (en dat wil je niet want dat is niet xHTML valid...), dan wordt het al een stuk lastiger.
Maar die ubb parsers veranderen toch alleen naar html als er [ignore] staat, en niet als er alleen [b][/ignore] staat?
Dus dan kan normaal dat probleem toch helemaal niet voorkomen?
Maar die ubb parsers veranderen toch alleen naar html als er [ignore] staat, en niet als er alleen [b][/ignore] staat?
Dat hangt er natuurlijk maar net vanaf hoe je UBB parser werkt. Als dat gewoon een simpele str_replace is waarbij de [ignore][b][/ignore] tag wordt veranderd in <b>, heb je dat probleem natuurlijk wel...
Dat hangt er maar net vanaf hoe je ubb parser in elkaar steekt. Een goede zou dit idd niet doen.
En dan heb je nog het probleem dat je de eerste 50 tekens van een bericht wil laten zien. Dan moeten de [ignore][b][/ignore] tags die niet gesloten worden, ook niet worden geshowd.
En het probleem van overlappende tags blijf je houden je moet er maar vanuit gaan dat de gebruiker het goed doet.
[edit]
De ubb parser van phphulp sucks, hij vervangt de [b] tags gewoon ook als ze niej geslote worden. Ik zet ff de ignore tags eromheen
[/edit]
@ Freek: Ga het eens proberen.
@ Aron: Heb een oude UBB parser, niet de beste, volgens mij eens van phphulp gehaald. Werkt verder prima, maar die parsed dus niet altijd een complete tag ([.b][./b]), maar parsed soms openings en sluitings tags.
Enkele van de tags worden met str_replace() omgezet, als [.b] ed. De uitgebreidere tags als [.img] en [.url] worden wel goed geparsed met preg_replace().
Zou script dus wat om moeten bouwen om te zorgen dat de eenvoudige tags ook gewoon goed gereplaced worden met preg_replace. Is dan alleen nog de vraag of het goed gaat met genestelde tags als [.b][.i], denk het wel.
Edit: whoo, ging beetje mis, halve tekst werd bold. :)
Offtopic: hoop dat die ubb beter is op nieuwe phphulp..
Hebben er meer mensen last van de PHP ubb-bar sinds firefox 3?
Als ik iets in de textarea probeer te plakken doet ik dat niet. Doe ik andre muisknop en dan plakken dan doet ie het wel