Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Parser te gretig met shortclose in mono/code/pre/spoiler/cmd

Pagina: 1
Acties:

  • Wiethoofd
  • Registratie: Juli 2007
  • Laatst online: 17-11 00:47

Wiethoofd

Broadcast TOM

Topicstarter
PHP:
1
2
3
4
/* hoort zonder \ voor de shortclose */
function foo($bar) {
    return $bar.'\[/]';
}

Random functie met een shortclose er in breekt het code-blok, haal de \ weg en vanaf daar wordt de rest plain text. Ongeacht single/double quotes er omheen wordt de voluit geschreven [/code] tag niet meegenomen.

Reproduceerbaar met de mono, pre, spoiler en cmd en vast allerlei andere tags.
PHP:
1
2
function foo($bar) {
    return $bar.'
';
}[/code]

function foo($bar) {
return $bar.'
';
}[/mono]

function foo($bar) {
	return $bar.'
';
}[/cmd]

spoiler:
function foo($bar) {
return $bar.'
';
}[/spoiler]

function foo($bar) {
	return $bar.'
';
}[/pre]

Volg me op Twitter/X & Bluesky


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Dus feitelijk zeg je dat de parser meer waarde moet hechten aan een full-close tag dan aan een short-close tag?

Ik hoef je hopelijk niet uit te leggen dat dat niet bepaald triviaal is. De parser probeert zo snel mogelijk een tree op te bouwen en dan wil je niet halverwege die fase weer gedeeltelijk opnieuw moeten beginnen omdat een stray end tag mogelijk toch bedoelt was als de èchte end tag, en die eerder geparsede [/] misschien toch niet bedoelt was als end tag...

In andere woorden: de situatie die je schetst is op z'n minst ambigueus, en dan kies ik liever voor de simpelere en snellere oplossing.

Intentionally left blank


  • Wiethoofd
  • Registratie: Juli 2007
  • Laatst online: 17-11 00:47

Wiethoofd

Broadcast TOM

Topicstarter
Maar kijken naar de gebruikte tag en als er een shortclose tussen quotes gevonden wordt deze negeren moet toch kunnen?

Het waarde hechten aan een full close zou triviaal zijn als je alleen correct genestte tags zou parsen (van buiten naar binnen werken).

Jammer dat tussen [code] tags een [norml] niet geparsed wordt, al staat alle UBB er nu wel correct.
PHP:
1
2
3
function foo($bar) {
 return $bar.'[norml][/][/norml]';
}

Volg me op Twitter/X & Bluesky


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Wiethoofd schreef op dinsdag 19 juni 2012 @ 10:43:
Maar kijken naar de gebruikte tag en als er een shortclose tussen quotes gevonden wordt deze negeren moet toch kunnen?
Dus feitelijk een tweede mechanisme om tags te kunnen escapen? Lijkt me nogal overdreven, en bovendien maakt het de 'taal' weer minder overzichtelijk.
Het waarde hechten aan een full close zou triviaal zijn als je alleen correct genestte tags zou parsen (van buiten naar binnen werken).
Dat is dus niet triviaal. Op het moment dat de parser bezig is met een [code]-tag parsen en hij komt een [/] tegen dan kan hij niet anders dan op dat moment aannemen dat dat de close tag is voor de eerder geziene [code]-tag. Als hij dan later toch weer een [/code] tegenkomt dan negeert hij deze want de [code]-tag was al afgesloten.

Als je wilt dat deze dan toch verwerkt wordt dan moet de parser dus gaan kijken of er daarvoor geen andere tags verwerkt zijn (de laatste node in de tree moet dus de eerder afgelosten [code]-tag zijn), vervolgens moet hij terugrollen naar het punt waarop hij de [/]-tag geparsed heeft, deze als 'literal' beschouwen en vervolgens opnieuw gaan parsen. Dat is iets dat je in een parser zo min mogelijk wilt doen (back tracking).
Jammer dat tussen [code] tags een [norml] niet geparsed wordt, al staat alle UBB er nu wel correct.
PHP:
1
2
3
function foo($bar) {
 return $bar.'[norml][/][/norml]';
}
Da's natuurlijk ook by design; een [code]-blok parsed geen enkele tag behalve een close-tag voor het blok zelf. In het begin hadden we het zo gedaan dat [code] niet met een short-close tag kon worden afgesloten, maar dat wekte ook weer verwarring bij gebruikers.

Intentionally left blank


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

crisp, is het wellicht wel mogelijk:

PHP:
1
2
3
4
/* hoort zonder \ voor de shortclose */
function foo($bar) {
    return $bar.'\[/]';
}


die [/] wel te escapen (in 't code-blok) zodat die backslash niet zichtbaar is?

[ Voor 4% gewijzigd door BtM909 op 19-06-2012 14:44 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

BtM909 schreef op dinsdag 19 juni 2012 @ 14:43:
crisp, is het wellicht wel mogelijk:

PHP:
1
2
3
4
/* hoort zonder \ voor de shortclose */
function foo($bar) {
    return $bar.'\[/]';
}


die [/] wel te escapen (in 't code-blok) zodat die backslash niet zichtbaar is?
Maar als ik die \ nu letterlijk bedoel; da's niet heel erg far-fetched natuurlijk:
PHP:
1
2
3
$a = '[' + '/]';
preg_match('~\[/]~', $a, $m);
var_dump($m);

:P (test maar eens met of zonder \)

Intentionally left blank


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

crisp schreef op dinsdag 19 juni 2012 @ 15:44:
[...]

Maar als ik die \ nu letterlijk bedoel; da's niet heel erg far-fetched natuurlijk:
PHP:
1
2
3
$a = '[' + '/]';
preg_match('~\[/]~', $a, $m);
var_dump($m);

:P (test maar eens met of zonder \)
Ik heb niks gezegd :+

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • Dirk
  • Registratie: November 2004
  • Laatst online: 18-11 17:59

Dirk

Coördinator frontpagemoderatie
In zo'n geval zou je toch de backslash zelf ook moeten escapen? Dus \\\[/] moeten schrijven om \[/] te krijgen?

All statements are true in some sense, false in some sense, meaningless in some sense, true and false in some sense, true and meaningless in some sense, false and meaningless in some sense, and true and false and meaningless in some sense.


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Dirk schreef op dinsdag 19 juni 2012 @ 19:26:
In zo'n geval zou je toch de backslash zelf ook moeten escapen? Dus \\\[/] moeten schrijven om \[/] te krijgen?
Mja, dan maak je het eigenlijk alleen maar nodeloos ingewikkeld... Ik zie dan nog meer in een tag waarmee je de shortclose tag kan 'uitschakelen'; da's veel makkelijker te implementeren dan hetgeen hier nu wordt voorgesteld...

Intentionally left blank


  • Dirk
  • Registratie: November 2004
  • Laatst online: 18-11 17:59

Dirk

Coördinator frontpagemoderatie
Maar in een normale tekst escape je \ ook al met \\, of ligt dat met code-tags nog een stuk complexer?

All statements are true in some sense, false in some sense, meaningless in some sense, true and false in some sense, true and meaningless in some sense, false and meaningless in some sense, and true and false and meaningless in some sense.


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Dirk schreef op dinsdag 19 juni 2012 @ 21:10:
Maar in een normale tekst escape je \ ook al met \\, of ligt dat met code-tags nog een stuk complexer?
Dat durf ik zo niet te zeggen; dan moet ik de parsercode voor induiken :P

Intentionally left blank


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

test [/] test

test \ test [/]

Ja dus :) althans dat is het escapen van een backslash voor een tag

[ Voor 35% gewijzigd door BtM909 op 20-06-2012 00:30 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Ik heb nog even gekeken en het lijkt er op dat het door een config-wijziging te fixen is.

Ik heb ook nog even gechecked met de frontpage parser (die o.a. voor tweakblogs wordt gebruikt en daar ook [code]-tags ondersteund), en daar werkt het al zo dat tag-escaping binnen [code]-tags gewoon werkt (omdat het in die parser ingebakken zit in de syntax en niet later als 'feature' is toegevoegd).

Uiteraard zou ik eea eerst nog goed moeten testen, maar ik voel er wel voor om dit in de forum-parser aan te passen - temeer omdat dat het gedrag tussen de FP-parser en forum-parser meer consistent maakt :)

Intentionally left blank


  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

*BUMP*
Er wordt hier gespoken over shortclose, maar ik kom het met normale close ook tegen
[Bold], 1 backslash, spatie, [close bold]: \ OK
[Bold], 2 backslashes, spatie, [close bold]: \\ OK
[Bold], 1 backslash, [close bold]: [b][/b] parser doet ogen dicht en vingers in de oren?
[Bold], 2 backslashes, [close bold]: \ nom nom nom, backslash unescapen, nom nom nom
[Bold], 3 backslashes, [close bold]: [b]\[/b] combi van bovenstaande 2 tests

500 "The server made a boo boo"


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Uhm, wat gaat er dan fout volgens jou?

Intentionally left blank


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

offtopic:
grrrr crisp


Je maakt het wel heel ingewikkeld ;)

Dit is wat je aantoont

[b]\ [/b] → \
[b]\\ [/b] → \\
[b]\[/b] → [b][/b]
[b]\[/b] → \
[b]\\[/b] → [b]\[/b]

Waarom kloppen de laatste drie niet volgens jou? ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

Ik wordt er 8)7 van, want als ik de backslashes tussen de UBB codes vervang door slashes is het resultaat anders.
[b]/ [/b] → /
[b]// [/b] → //
[b]/[/b] → /
[b]//[/b] → //
[b]///[/b] → ///

500 "The server made a boo boo"


  • Wiethoofd
  • Registratie: Juli 2007
  • Laatst online: 17-11 00:47

Wiethoofd

Broadcast TOM

Topicstarter
De \ kun je namelijk gebruiken om een ubb-tag (of een nieuwe \ ) te escapen, is wat simpeler en korter dan [norml][/norml] om je tag heen te moeten typen om hem te laten zien in je voorbeeld :9

Volg me op Twitter/X & Bluesky


  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

Agreed, kan dat dan ook bij Overzicht van UBB-codes gezet worden?
Ik ken het nu helegaar nie vinden, er wordt alleen over het escapen van quotes geschreven.
...Om een letterlijke quote op te nemen in een attribuut-waarde kan je deze escapen met behulp van een backward slash....
[abbr="Anders moet je \"escapen\""] bla [/abbr]

Ik moet inderdaad toegeven dat het erg handig is, met een gekopieerd stukje tekst zoals hierboven

500 "The server made a boo boo"


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Staat toch in de faq: Overzicht van UBB-codes #escaping :?

Intentionally left blank


  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

:X :F * Vaan Banaan gaat in een hoekje staan en zich schamen ;w

[ Voor 15% gewijzigd door Vaan Banaan op 26-07-2012 01:51 ]

500 "The server made a boo boo"

Pagina: 1