W3C validator gaat over z`n nek bij PHP in URL.

Pagina: 1
Acties:

  • stok
  • Registratie: Oktober 2000
  • Niet online
Wanneer ik men pruts-site door de validator haal geeft ie dit aan:

code:
1
2
3
4
Line 29, column 50: 
  ... ibuted.net/participant/psummary.php?project_id=25&id=399283">OGR-25 st ...
                                                        ^
Error: unknown entity "id"


Waarom doet ie dit niet :?
Doctype staat goed (HTML 4.01 transitional)

  • Tim Schuhmacher
  • Registratie: Januari 2000
  • Laatst online: 14:05

Tim Schuhmacher

abasios

Misschien dat id een gereserveerd woord is, krijg je de fout ook als je produktid van maakt bv?

  • stok
  • Registratie: Oktober 2000
  • Niet online
code:
1
2
3
Line 29, column 50: 
  ... ibuted.net/participant/psummary.php?project_id=25&productid=399283">OG ...
                                                        ^Error: unknown entity "productid"


Hmzzz.
Vage shit :?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 16:31

crisp

Devver

Pixelated

Ik meen dat een ampersand niet mag voorkomen in een url; eigenlijk zou je dus voor parameters een ander scheidingsteken moeten gebruiken (in te stellen in php.ini).
Ik zou me er echter maar niet zo druk over maken omdat het nogal common-good is...

Intentionally left blank


  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-08 18:36
Dit is een nietszeggende error post ;). En eigenlijk meer een bug in die validator. Door die & ziet hij id= als een attribute voor die tag. Heeft trouwens niks met PHP te maken.

In ieder geval, hij werkt toch? Gewoon negeren dus.
edit:
dat is dus niet goed
crisp schreef op 29 september 2002 @ 22:43:
Ik meen dat een ampersand niet mag voorkomen in een url; eigenlijk zou je dus voor parameters een ander scheidingsteken moeten gebruiken (in te stellen in php.ini).
[...]
:?

[ Voor 0% gewijzigd door Ericston op 01-10-2002 16:33 . Reden: zie mbravenboer ]


  • RM-rf
  • Registratie: September 2000
  • Laatst online: 16:18

RM-rf

1 2 3 4 5 7 6 8 9

code:
1
... ibuted.net/participant/psummary.php?project_id=25&id=399283"

is wel goed
Ericston schreef op 29 september 2002 @ 22:44:
Dit is een nietszeggende error. En eigenlijk meer een bug in die validator.
nee !

attributes mogen geen ongecodeerde tekens bevatten als '&' net als '<' en '>'
probeer maar eens een variabele 'reg' of 'amp' als tweede variabele in een GET-request met explorer te versturen, dat gaat fout

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ericston: Dit is een nietszeggende error. En eigenlijk meer een bug in die validator.
Helaas moet ik jouw post dan toch ook als nietszeggend kwalificeren ;) . Het is absoluut geen bug in de validator: & moet gewoon geschreven worden als &

& heeft namelijk dezelfde functie als de \ in veel programmeertalen: het escapen van bijzondere tekens. Als je er vanuit gaat dat je gewoon & op mag nemen in een html document, is de betekenis van < nogal onduidelijk. Net zoals je in al die programmeertalen door deze bijzondere functie van de \ deze \ als \\ moet schrijven, moet je in HTML de & als & schrijven...

Verbazingwekkend eigenlijk dat zo weinig mensen dit weten (en dat de mensen die het wel weten correcte HTML niet belangrijk vinden...).

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

RM-rf schreef op 29 september 2002 @ 22:50:

attributes mogen geen ongecodeerde tekens bevatten als '&' net als '<' en '>'
probeer maar eens een variabele 'reg' of 'amp' als tweede variabele in een GET-request met explorer te versturen, dat gaat fout

> mag geloof ik nog wel, maar is natuurlijk zeer af te raden.
mbravenboer schreef op 29 september 2002 @ 22:55:
[...]

Helaas moet ik jouw post dan toch ook als nietszeggend kwalificeren ;) . Het is absoluut geen bug in de validator: & moet gewoon geschreven worden als &

& heeft namelijk dezelfde functie als de \ in veel programmeertalen: het escapen van bijzondere tekens. Als je er vanuit gaat dat je gewoon & op mag nemen in een html document, is de betekenis van < nogal onduidelijk. Net zoals je in al die programmeertalen door deze bijzondere functie van de \ deze \ als \\ moet schrijven, moet je in HTML de & als & schrijven...

Verbazingwekkend eigenlijk dat zo weinig mensen dit weten (en dat de mensen die het wel weten correcte HTML niet belangrijk vinden...).
Ik vind het ook erg belangrijk om dit goed te doen, omdat je anders het risico loopt dat bijvoorbeeld een parser je document niet goed verwerkt. Dan kun je natuurlijk de schuld geven aan de user agent of wat dan ook, maar in feite zijn het de developers die foute HTML code hanteren, en die dan verwachten dat de browser het wel opknapt. Juist daardoor zitten we nu met compatibiliteitsproblemen.

Een terug op die attribuut waarden: alles werkt gewoon zoals het hoort als je letters of tekens vervangt door entities. Probeer bijvoorbeeld eens alert("test"); in een onclick attribuut te zetten bijvoorbeeld. Het werkt, omdat de parser die entities zelf omzet naar de vertegenwoordigde waarden.

Gebruik dus altijd entities voor <, >, " en & wanneer dat nodig is, dat wordt dus <, > " en &. Stel PHP ook zo in dat hij & gebruikt in een URL :)

  • stok
  • Registratie: Oktober 2000
  • Niet online
Ok. Het is gefixed!
Bedankt allen _/-\o_

Verwijderd

Verwijderd schreef op 30 september 2002 @ 00:37:
Gebruik dus altijd entities voor <, >, " en & wanneer dat nodig is, dat wordt dus <, > " en &. Stel PHP ook zo in dat hij & gebruikt in een URL :)
Wanneer is het nodig?

  • tomato
  • Registratie: November 1999
  • Niet online
Als je valid XML wilt krijgen ;)

(bijvoorbeeld in het geval van XHTML dus)

Verwijderd

tomato schreef op 30 september 2002 @ 11:23:
[...]

Als je valid XML wilt krijgen ;)

(bijvoorbeeld in het geval van XHTML dus)
Da's niet waar, of je begrijpt me verkeerd. Ik heb een volledig XHTML-valid site gemaakt waarbij ik nergens alert("test"); heb hoeven gebruiken...

Ik bedoelde met mijn vraag: wanneer is het nodig om die tekens in je code te escapen? Dat je het in je content moet escapen wist ik al.

Verwijderd

Verwijderd schreef op 30 september 2002 @ 11:36:
[...]


Da's niet waar, of je begrijpt me verkeerd. Ik heb een volledig XHTML-valid site gemaakt waarbij ik nergens alert("test"); heb hoeven gebruiken...

Ik bedoelde met mijn vraag: wanneer is het nodig om die tekens in je code te escapen? Dat je het in je content moet escapen wist ik al.
Daar ligt denk ik ook het misverstandje :)
Als ik het goed heb moet je er alleen in je HTML content op letten dat je entities gebruikt.

@Cheatah: waarom zou je php entities moeten laten parsen uit url's? Als het goed is komt bijv een ampersand er daar toch gewoon als & in en niet als & ?

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 16:18

RM-rf

1 2 3 4 5 7 6 8 9

Verwijderd schreef op 30 september 2002 @ 15:40:
[...]

Daar ligt denk ik ook het misverstandje :)
Als ik het goed heb moet je er alleen in je HTML content op letten dat je entities gebruikt.

@Cheatah: waarom zou je php entities moeten laten parsen uit url's? Als het goed is komt bijv een ampersand er daar toch gewoon als & in en niet als & ?
de value van attributes is eveneens 'content' en valt dus onder entities;
vergelijk het met een ALT-tag:
daar moet je ook [img]"blaa%20haat.jpg"[/img]

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


Verwijderd

Inderdaad, om het nog even iets duidelijker te illustreren:

In het Document Object Model (dat ik voor mezelf voorstel als een afspiegeling van een XML document in een bruikbare set object in een programmeertaal) heeft een attribute node (Attr) ook childNodes, die samen de waarde van de node bevatten, of wat in een XML document dus tussen de quotes van het attribuut zou staan.

Die childNodes kunnen zowel text nodes als entity reference nodes zijn, je kun het ongeveer zo uitbeelden:
code:
1
2
3
4
5
6
7
8
9
img---+
      |---src
      |     +---blaa%20haat.jpg
      |
      +---alt
            |---bl
            |---&eacute;
            |---&eacute;
            +---hr

Intern mogen de entity references vervangen worden door het teken/de tekens die ze vertegenwoordigen.
Dat kun je allemaal lezen in de recommendation voor XML 1.0 en working draft voor DOM level 3.
Behoorlijk technische kost, maar ik vond het heel interessant.

En met dat juist instellen van PHP bedoelde ik in php.ini de volgende instelling:
code:
1
arg_separator.output = "&amp;"


Nog even terugkomen op de vraag van Blues: het is altijd nodig als je niet toegestane tekens in een attribute value wilt zetten. Wat ik bedoelde te laten zien met dat alert voorbeeldje is dat de meeste browsers er ook goed mee omgaan, al zou je dat niet direct verwachten als je altijd HTML 4.01 hebt gebruikt of iets dergelijks.

  • Skinkie
  • Registratie: Juni 2001
  • Laatst online: 09-06-2020

Skinkie

Op naar de 500

ik heb niemand nog de (makkelijke) oplossing horen geven... als je & vervangt door &+ heb je de goede schrijfwijze... die dus goed wordt gevalideerd door de w3c.

Steun Elkaar, Kopieer Nederlands Waar!


Verwijderd

Dan is de validator van W3C niet helemaal in orde...
[10] AttValue ::= '"' ([^<&"] | Reference)* '"' | "'" ([^<&'] | Reference)* "'"
Daar staat namelijk niets over uitzonderingen.

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Cheatah, goed stuk hierboven over de uitleg van het gebruik van de characters binnen HTML, entity en code..

Ikzelf vond altijd dat het een fout was van de validator en niet van mijzelf |:(

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 16:18

RM-rf

1 2 3 4 5 7 6 8 9

Verwijderd schreef op 30 september 2002 @ 16:10:
Nog even terugkomen op de vraag van Blues: het is altijd nodig als je niet toegestane tekens in een attribute value wilt zetten. Wat ik bedoelde te laten zien met dat alert voorbeeldje is dat de meeste browsers er ook goed mee omgaan, al zou je dat niet direct verwachten als je altijd HTML 4.01 hebt gebruikt of iets dergelijks.
sterker nog, als je &-tekens in een URL niet escaped kun je zeker problemen krijgen met msie's alzheimer:
deze probeert namelijk ook entitie's te renderen zonder afsluitende ';' en blaat.php?foo=bar&register=true wordt vervolgens gesubmit als zijnde
blaat.php?foo=bar®ister=true

je waarde register bestaat dan niet meer (en is opeens false dus) en foo heeft een compleet andere waarde

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen

Pagina: 1