"The thing under my bed waiting to grab my ankle isn't real. I know that, and I also know that if I'm careful to keep my foot under the covers, it will never be able to grab my ankle." - Stephen King
Quinta: 3 januari 2005
Verwijderd
[ quote ]\n(.*?)[/quote]
dus je hebt dan 2 regexes.. niet echt mooi... maargoed..
[ Voor 35% gewijzigd door Verwijderd op 18-06-2004 19:55 ]
Hoe moet ik dat invoegen in het laaste php statement?Verwijderd schreef op 18 juni 2004 @ 19:55:
als je nu eens regext op:
[ quote ]\n(.*?)[ /quote ]
dus je hebt dan 2 regexes.. niet echt mooi... maargoed..
1
2
| $news = preg_replace("#\\[quote\]\n(.*?)\\[/quote\]#si", "<blockquote>\\1</blockquote>", $news); |
werkt niet....
* Schonhose is wat confused want dit is nieuw voor hem.
[ Voor 21% gewijzigd door Schonhose op 18-06-2004 20:04 ]
"The thing under my bed waiting to grab my ankle isn't real. I know that, and I also know that if I'm careful to keep my foot under the covers, it will never be able to grab my ankle." - Stephen King
Quinta: 3 januari 2005
Verwijderd
1
2
3
4
| <? $news = preg_replace("#\\[quote\]\\n(.*?)\\[/quote\]#si", "<blockquote>\\1</blockquote>", $news); ?> |
Meer concreet: in het voorbeeld dat je geeft staat zowel voor als na de regel tekst een newline. Hoe komt het dat je alleen de eerste newline vervangt door <br>? En wat heeft jouw reguliere expressie ermee te maken? Die vervangt namelijk helemaal geen \n door <br> (er staat alleen toevallig een <br> hardcoded in). Zorg dat je je zaken op orde hebt als je hier een vraag komt stellen, want de situatie die je schetst is zo inconsistent dat ik al weet dat 'ie niet klopt.
Nu hopelijk een beetje constructief commentaar (
Hoe kan ik tekst schrijven die niet door React geparsed wordt, zodat ik in het voorbeeld hierboven [_quote][/quote] kan schrijven zonder underscore? Ik meende dat daar een speciale tag voor was, maar geen idee welke...
edit:
Ah, met 'norml'-dus. Tnx nescafe!
[ Voor 40% gewijzigd door Soultaker op 18-06-2004 21:21 ]
Zijnde [norml][quote][/quote][/norml]
* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans
Weet je waar ik moedeloos van wordt? Van dat muggenzifterij. Ooit wel eens bij stil gestaan dat ik misschien de laatste half uur voor de TS alleen maar gewerkt heb met de " /" i.vm. met HTML en dat ik dan om die reden per ongeluk deze weer gebruik wanneer ik "\n" bedoel?Soultaker schreef op 18 juni 2004 @ 21:02:
Om te beginnen: zo'n newline character noteer je als \n en niet anders. Is het nou echt zo moeilijk om gewoon de correcte spellingswijze over te nemen van alle honderden PHP tutorials en manuals waarin het goed gespeld wordt? Het komt zo dom over dat ik al gelijk een beetje moedeloos wordt als ik je topicstart lees.
Op basis van een door mij gemiste <br /> tag is mijn vraag al helemaal inconsistent? En je weet dus al dat het niet klopt. Das mooi.... lees dan ook vooral niet verder wanneer ik zo meteen de oplossing geef. Die wel mooi werkt met mijn "inconsistente" situatie.Meer concreet: in het voorbeeld dat je geeft staat zowel voor als na de regel tekst een newline. Hoe komt het dat je alleen de eerste newline vervangt door <br>? En wat heeft jouw reguliere expressie ermee te maken? Die vervangt namelijk helemaal geen \n door <br> (er staat alleen toevallig een <br> hardcoded in). Zorg dat je je zaken op orde hebt als je hier een vraag komt stellen, want de situatie die je schetst is zo inconsistent dat ik al weet dat 'ie niet klopt.
Mocht je toch nog doorlezen, kom dan maar even van je voetstuk af want zoveel weet je eigenlijk ook weer niet. Het komt zo dom over dat je niet weet hoe je moet zoeken want een simpele zoektocht in de FAQ van GoT had je de oplossing gegeven hoe je gebruik kunt maken van de [norml] tag.
Aangezien zoeken dus niet je sterkste kant is (leuk he, vooroordelen) zal ik het nog even quoten:
1
| [norml] [b] hoi [/b] [/norml] RML tags tussen [norml] tags worden niet verwerkt |
Tja, wat kan ik hier van zeggen: ik heb je post gelezen en ben er mee aan de slag gegaan, maar het was veel te omslachtig. Gelukkig lopen er ook nog mensen met verstand van zaken rond zoals Ibex.Nu hopelijk een beetje constructief commentaar (): het is vaak makkelijker om een ingewikkelde transformatie niet met een enkele ingewikkelde reguliere expressie op te lossen, maar het probleem stapsgewijs op te lossen. Je gebruikt dan bijvoorbeeld alleen een reguliere expressie om de tekst tussen de quote tags uit te halen (iets met [quote](.*?)[/quote] dus), haal van het resultaat met trim ofzo de newline characters links en rechts weg, en haal de boel vervolgens door nl2br om de <br>-tags toe te voegen. Vervolgens kun je de string construeren door er <blockquote>-tags omheen te zetten.
Deze wist me te vertellen dat er in textareas geen \n maar een \r\n werd toegevoegd. Waarschijnlijk staat ook dit wel ergens vermeld in de vele tutorials over PHP (je kent ze wel, daar staat ook in dat het \n is).
Na deze informatie en mijn eigen kennis samengevoegd te hebben kwam ik uit op het volgende statement om het geheel goed te parsen:
1
2
| $news = preg_replace("#\\[quote\]\r\n(.*?)\\[/quote\]#si", "<blockquote>\\1<br /></blockquote>", $news); |
En zo werkt mijn "inconsistente" oplossing naar alle tevredenheid.
@Stoel, I'm correcting you, want je zat even fout. Je hoeft een \n niet te escapen omdat ie anders naar "\n" opzoek gaat als zijnde tekst.
[ Voor 4% gewijzigd door Schonhose op 19-06-2004 00:01 ]
"The thing under my bed waiting to grab my ankle isn't real. I know that, and I also know that if I'm careful to keep my foot under the covers, it will never be able to grab my ankle." - Stephen King
Quinta: 3 januari 2005
Ehm, rustig. Soultaker zegt terecht dat je TS rammelt als je dingen vergeet die wel degelijk van belang zijn. Bovendien is de oplossing die hij vervolgens noemt al een stuk beter dan wat er tot dan toe gesuggereerd is in dit topic.Schonhose schreef op 18 juni 2004 @ 23:55:
Weet je waar ik moedeloos van wordt? Van dat muggenzifterij. Ooit wel eens bij stil gestaan dat ik misschien de laatste half uur voor de TS alleen maar gewerkt heb met de " /" i.vm. met HTML en dat ik dan om die reden per ongeluk deze weer gebruik wanneer ik "\n" bedoel?
Op basis van een door mij gemiste <br /> tag is mijn vraag al helemaal inconsistent? En je weet dus al dat het niet klopt. Das mooi.... lees dan ook vooral niet verder wanneer ik zo meteen de oplossing geef. Die wel mooi werkt met mijn "inconsistente" situatie.
Bullshit. Op een Windows systeem is het \r\n, op een *nix systeem is het \n, en zo kunnen er nog andere mogelijkheden zijn. Heeft niets maar dan ook niets met een textarea te maken.Schonhose schreef op 18 juni 2004 @ 23:55:
Tja, wat kan ik hier van zeggen: ik heb je post gelezen en ben er mee aan de slag gegaan, maar het was veel te omslachtig. Gelukkig lopen er ook nog mensen met verstand van zaken rond zoals Ibex.
Deze wist me te vertellen dat er in textareas geen \n maar een \r\n werd toegevoegd. Waarschijnlijk staat ook dit wel ergens vermeld in de vele tutorials over PHP (je kent ze wel, daar staat ook in dat het \n is).
Zo werkt ie inderdaad op jouw server naar alle tevredenheid. Tot je je site migreert naar een Linux server, dan doet je hele quote systeem het ineens niet meer.Schonhose schreef op 18 juni 2004 @ 23:55:
Na deze informatie en mijn eigen kennis samengevoegd te hebben kwam ik uit op het volgende statement om het geheel goed te parsen:
PHP:
1 2 $news = preg_replace("#\\[quote\]\r\n(.*?)\\[/quote\]#si", "<blockquote>\\1<br /></blockquote>", $news);
En zo werkt mijn "inconsistente" oplossing naar alle tevredenheid.
1
2
| $news = preg_replace("#\\[quote\][\r\n]{0,2}(.*?)\\[/quote\]#si", "<blockquote>\\1<br /></blockquote>", $news); |
Dat werkt al veel beter. Nou pakt ie het ook als er geen enter staat, en bovendien werkt ie op servers die welke combinatie van \r of \n dan ook gebruiken.
[ Voor 7% gewijzigd door NMe op 19-06-2004 00:10 ]
'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.
[quote]en meteen tekst er achteraan[/quote]
een trim over de stuk text vind ik persoonlijk ook mooier; kijk eens naar preg_replace_callback
*NMe84: ook vanaf een client onder linux geeft een textarea \r\n terug voor linebreaks in een textarea, dat is namelijk een vaste afspraak.
[ Voor 44% gewijzigd door crisp op 19-06-2004 00:17 ]
Intentionally left blank
Het spijt me als ik je zo moet wakkerschudden, maar als je niet gestructureerd kunt werken dan zul je nooit leren programmeren. Ik breng het misschien wat cru, maar dat neemt niet weg dat zorgvuldig opschrijven wat je bedoelt essentieel is om een fatsoenlijk werkend algoritme te schrijven.Schonhose schreef op 18 juni 2004 @ 23:55:
Weet je waar ik moedeloos van wordt? Van dat muggenzifterij. Ooit wel eens bij stil gestaan dat ik misschien de laatste half uur voor de TS alleen maar gewerkt heb met de " /" i.vm. met HTML en dat ik dan om die reden per ongeluk deze weer gebruik wanneer ik "\n" bedoel?
Er is ook altijd nog dit punt: als je al niet de moeite neemt om dingen bij hun naam te noemen of je topic start na te lezen op dit soort vergissingen, dan vraag ik me ook af of je de tijd en moeite die de andere bezoekers besteden om jouw te helpen wel genoeg waardeert.
Het ging om meer dan "een gemiste <br/ > tag"; sterker nog, daar heb ik je niet op gewezen. Je invoervoorbeeld klopt niet met je uitvoervoorbeeld, en de code die je erbij geeft correspondeert niet met het uitvoervoorbeeld. Met andere woorden: het is niet mogelijk om met de code die je geeft van de invoer die je geeft naar de uitvoer die je geeft te komen. Dat is incosistent.Op basis van een door mij gemiste <br /> tag is mijn vraag al helemaal inconsistent? En je weet dus al dat het niet klopt. Das mooi.... lees dan ook vooral niet verder wanneer ik zo meteen de oplossing geef. Die wel mooi werkt met mijn "inconsistente" situatie.
Ik moet trouwens kwijt dat ik de opzet van je topicstart op zichzelf erg goed vond, omdat je duidelijk aangaf wat de invoer, de programmacode, de verwachte uitvoer én de huidige uitvoer was. Daar kunnen sommige andere mensen nog wat van leren. Dat neemt niet weg dat als die gegevens simpelweg niet kloppen (en dat kon ik dus al zien aan de onderlinge inconsistentie) de kwaliteit van de topicstart toch achteruit gaat.
Ik geloof best dat je uiteindelijk een werkende oplossing krijgt. Dat heeft verder niets te maken met of je originele code consistent was of niet.
Dank je wel, hoor, maar dat had nescafe dus al verteld. Het mag trouwens wel iets minder cynisch.Aangezien zoeken dus niet je sterkste kant is (leuk he, vooroordelen) zal ik het nog even quoten:
code:
1 [norml] [b] hoi [/b] [/norml] RML tags tussen [norml] tags worden niet verwerkt
Dat is ook niet erg dankbaar. Verder heb ik geen post van Ibex gezien in dit topicTja, wat kan ik hier van zeggen: ik heb je post gelezen en ben er mee aan de slag gegaan, maar het was veel te omslachtig. Gelukkig lopen er ook nog mensen met verstand van zaken rond zoals Ibex.
Ik ging er van uit dat je wel meerdere regels in een quote zou willen handhaven. Je bent je er trouwens van bewust dat deze oplossing alleen werkt als er direct een newline na de [quote]-tag staat? Met andere woorden, als ik deze code schrijf:Deze wist me te vertellen dat er in textareas geen \n maar een \r\n werd toegevoegd. Waarschijnlijk staat ook dit wel ergens vermeld in de vele tutorials over PHP (je kent ze wel, daar staat ook in dat het \n is).
Na deze informatie en mijn eigen kennis samengevoegd te hebben kwam ik uit op het volgende statement om het geheel goed te parsen:
PHP:
1 2 $news = preg_replace("#\\[quote\]\r\n(.*?)\\[/quote\]#si", "<blockquote>\\1<br /></blockquote>", $news);
En zo werkt mijn "inconsistente" oplossing naar alle tevredenheid.
1
| [quote]Hallo![/quote] |
Of, zelfs deze:
1
2
3
| [quote] De regel hierboven eindigt met een spatie. [/quote] |
crisp schreef op 19 juni 2004 @ 00:11:
*NMe84: ook vanaf een client onder linux geeft een textarea \r\n terug voor linebreaks in een textarea, dat is namelijk een vaste afspraak.
Neemt niet weg dat mijn regexp al een stuk flexibeler is, en daardoor ook op andere dingen toe te passen is.
'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.
De HTTP POST specificatie zegt inderdaad dat er \r\n (in bytes: 13 10) over het netwerk verstuurd wordt, maar het zou me niets verbazen als PHP dat onder Windows interpreteert als een enkel newline karakter. Iemand met een PHP install onder Windows om dat te verifiëren?crisp schreef op 19 juni 2004 @ 00:11:
*NMe84: ook vanaf een client onder linux geeft een textarea \r\n terug voor linebreaks in een textarea, dat is namelijk een vaste afspraak.
Ik heb dat toevallig van de week lopen testen en onder windows krijg ik ook CRLF (dus 2 bytes) terug per enter, ook vanaf een linux client.Soultaker schreef op 19 juni 2004 @ 00:17:
[...]
De HTTP POST specificatie zegt inderdaad dat er \r\n (in bytes: 13 10) over het netwerk verstuurd wordt, maar het zou me niets verbazen als PHP dat onder Windows interpreteert als een enkel newline karakter. Iemand met een PHP install onder Windows om dat te verifiëren?
[ Voor 3% gewijzigd door crisp op 19-06-2004 00:20 ]
Intentionally left blank
1
2
3
4
5
6
7
| $news = preg_replace_callback('/\\[quote\](.*?)\\[\/quote\]/si', 'quote', $news); function quote($matches) { return '<blockquote>'.nl2br(trim($matches[1])).'</blockquote>'; } |
Intentionally left blank
Dat dacht ik ook toen ik jouw posting las.....Soultaker schreef op 19 juni 2004 @ 00:14:
Dank je wel, hoor, maar dat had nescafe dus al verteld. Het mag trouwens wel iets minder cynisch.
Naast GoT zijn er ook andere manieren om te communiceren. En dankbaar? Vijftig procent van je posting besteed je om mij af te kraken en zitten vol met vooroordelen. De oplossing met de trim is inderdaad zo slecht nog niet getuige je onderstaande opmerking. Hier had ik even niet aangedacht.... maar dat neemt niet weg dat ik nog steeds van mening ben dat je conclusies trekt die je niet mag trekken...Dat is ook niet erg dankbaar. Verder heb ik geen post van Ibex gezien in dit topic
Hmmm, das wel een goed punt wat je daar aandraagt. Dan zou idd een trim oplossing van jou en wat Crisp ook zegt beter werken.Ik ging er van uit dat je wel meerdere regels in een quote zou willen handhaven. Je bent je er trouwens van bewust dat deze oplossing alleen werkt als er direct een newline na de [ quote ]-tag staat? Met andere woorden, als ik deze code schrijf:
code:
1 [quote]Hallo![/quote]
Of, zelfs deze:code:Dan wordt er niets vervangen.
1 2 3 [quote] De regel hierboven eindigt met een spatie. [/quote]
Back 2 the drawing board dan maar weer.
[edit]
@Crisp:
Das wel een interessante functie want ik was me al aan het afvragen hoe ik de trim moest gaan verwerken. In mijn geval is die nl2br niet nodig op deze plaats want dit doe ik op de hele message na het parsen.
Ik ga dit eens even testen.
[edit2]
Works like a charm...
Leuke dingen geleerd zo uit 1 topic \o/
Toch in meerdere gevallen een nuttig topic met nuttige info
[ Voor 20% gewijzigd door Schonhose op 19-06-2004 00:41 ]
"The thing under my bed waiting to grab my ankle isn't real. I know that, and I also know that if I'm careful to keep my foot under the covers, it will never be able to grab my ankle." - Stephen King
Quinta: 3 januari 2005
Jouw modbreaks worden ook steeds uitgebreider gedecoreerd he, curry684
Eens kijken hoe ik dit kan oplossen.... Suggestions are appreciated.
"The thing under my bed waiting to grab my ankle isn't real. I know that, and I also know that if I'm careful to keep my foot under the covers, it will never be able to grab my ankle." - Stephen King
Quinta: 3 januari 2005
Wanneer een gebruiker op de quote-knop klikt, wordt de desbetreffende quote uit de database gehaalt, en word deze door de volgende functie gehaald:
1
2
3
4
5
6
| function filterquote($var) { $var = preg_replace("/(\\[quote)(=)?([^\]]*)(\])((.|\n)*?)(\\[\/quote\])/i", "[...]", $var); return $var; } |
Vervolgens voeg ik er [quote=info] voor, en plak er [/quote] achter. De info haal ik dan op vanuit de database.
Op deze manier is het bericht gequoted, en zijn alle quotes die in het oorsprongkelijke bericht voorkwamen vervangen door [...].
Wanneer de text wordt geparsed, haal ik deze door de ubb-parser (die ik zelf aan het schrijven ben.). De volgende functie zorgt ervoor dat de quote mooi tevoorschijn komt.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| function parseubb($var) { $var = preg_replace("/\\[quote(=)?([^·]+?)·([^·]+?)·([^\]]+?)\]/i", "<br />\n<h4 class=\"inspring\">". "Quote van \\2 op \\3 om \\4:</h4>". "<br />\n<div class=\"accent inspring\">\n", $var); // ^^^ de code voor formaat [quote=poster·postdatum·posttijd] blaat [/quote] $var = preg_replace("/\\[quote\]/i", "<br />\n<h4 class=\"inspring\">Quote:</h4>". "<br />\n<div class=\"accent inspring\">\n", $var); // ^^^ de code voor formaat [quote] blaat [/quote] $var = preg_replace("/\\[\/quote\]/i", "</div>", $var); // ^^^ de code voor de [/quote] } |
Op deze manier staat een quote in een div, en heb je geen last van als de gebruiker dan toch persé een quote in een quote nest. Deze zal dan mooi geparsed worden. Maar normaal zal dat niet voorkomen, als de gebruiker gewoon gebruik maakt van de quote-knop, want daar worden alle quotes uit het oorsprongkelijke bericht gefilterd, wat dus geneste quotes tegengaat.
Hier nog eventjes de css van de desbetreffende div's:
1
2
3
4
5
6
7
8
9
10
11
12
| div.inspring { margin-left: 50px; } div.accent { background-color: <? echo $bgcolormed.";\n"; ?> padding: 10px; border-bottom: 1px solid <? echo $border.";\n"; ?> border-top: 1px solid <? echo $border.";\n"; ?> } h4.inspring { margin-left: 50px; } |
Ik hoop dat je het een beetje snapt, en anders kom je maar op msn langs
[ Voor 71% gewijzigd door Ibex op 19-06-2004 10:39 . Reden: beter code, css, anti-layout-verneuking, ... ]
Archlinux - Rode gronddingetjes zijn lekker - Komt uit .be
Ik werk nochtans op een Linux systeem, en kom dus wel degelijk \r\n tegen. Hmz, zoals Crips Crisp (NMe84 schreef op 19 juni 2004 @ 00:08:
Bullshit. Op een Windows systeem is het \r\n, op een *nix systeem is het \n, en zo kunnen er nog andere mogelijkheden zijn. Heeft niets maar dan ook niets met een textarea te maken.
[...]
Zo werkt ie inderdaad op jouw server naar alle tevredenheid. Tot je je site migreert naar een Linux server, dan doet je hele quote systeem het ineens niet meer.
Msn dusSoultaker schreef op 19 juni 2004 @ 00:14:
Dat is ook niet erg dankbaar. Verder heb ik geen post van Ibex gezien in dit topic
Nuja, al bij al deed deze post er niet zoveel meer toe, behalve wat herhalen

[ Voor 30% gewijzigd door Ibex op 19-06-2004 13:07 . Reden: ik blijk 11 te spuiten ]
Archlinux - Rode gronddingetjes zijn lekker - Komt uit .be
Een quote in een quote weergeven kan alleen als je een stack-based parser gebruikt, regular expressies hebben die kracht niet. Als je per se regular expressions wil blijven gebruiken, dan is de code die Ibex je gaf inderdaad de beste.Schonhose schreef op 19 juni 2004 @ 10:12:
Na wat uitgebreider testen blijkt dat er geen rekening gehouden wordt met een [ quote] in een [ quote],
Eens kijken hoe ik dit kan oplossen.... Suggestions are appreciated.
Psssst Ibex, het is crisp, niet crips.
[ Voor 4% gewijzigd door NMe op 19-06-2004 12:19 ]
'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.
Verwijderd schreef op 19 juni 2004 @ 12:20:
Download het mooie scriptje van oisyn's website, ben je in 1 klap klaar
Linkje?Er kon geen gebruiker met de ingevoerde nickname worden gevonden.
(interne identificatie: search::find::no_user_found_topicstarter)
"The thing under my bed waiting to grab my ankle isn't real. I know that, and I also know that if I'm careful to keep my foot under the covers, it will never be able to grab my ankle." - Stephen King
Quinta: 3 januari 2005
Schonhose schreef op 19 juni 2004 @ 13:28:[...][...]Linkje?
Tis toch .oisyn? Let op de punt.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| $news = preg_replace_callback('/\[quote]((([^[]|\\[(?!\/?quote))*|(?R))*)\\[\/quote]/is', 'quote', $news); function quote($matches) { $content = $matches[1]; // toggle genest of geneste quotes vervangen door [...] // $content = preg_replace_callback('/\[quote]((([^[]|\\[(?!\/?quote))*|(?R))*)\\[\/quote]/is', 'quote', $content); $content = preg_replace('/\[quote]((([^[]|\\[(?!\/?quote))*|(?R))*)\\[\/quote]/is', '<br />[...]<br />', $content); // vervang [img]-tags door [url=...]afbeelding[/url] $content = preg_replace('/\\[img\](http:\/\/)?(.*?)\\[\/img\]/i', '<a href="http://$2" target="_blank">afbeelding</a>', $content); $content = preg_replace('/\\[img=([0-9]{1,3}),([0-9]{1,3})\](http:\/\/)?(.*?)\\[\/img\]/i', '<a href="http://$4" target="_blank">afbeelding</a>', $content); return '<blockquote>quote:<hr width="100%" size="1" color="#808080" />'.$content.'<hr width="100%" size="1" color="#808080" /></blockquote>'; } |
Intentionally left blank