[URL] Brackets in een URL

Pagina: 1
Acties:

  • kingmuze
  • Registratie: Februari 2003
  • Laatst online: 05-11-2025

kingmuze

so don't fear

Topicstarter
Sinds lange tijd gebruik ik al URL's als de volgende:

code:
1
http://www.server.com/page.php?something=value&somethingelse=othervalue&things[]=x&things[]=y


In de URL rfc (Uniform Resource Locators (URL)) lees ik het volgende:
The characters ";", "/", "?", ":", "@", "=" and "&" are the characters which may be reserved for special meaning within a scheme. No other characters may be reserved within a scheme.
De brackets (van things[]) hebben dus geen speciale waarde maar ze zijn wel unsafe en moet ik dus encoden. De variabele things[] kan in PHP wel gewoon worden uitlezen als array.
Encoded ziet het er als volgt uit:
code:
1
http://www.server.com/page.php?something=value&somethingelse=othervalue&things%5b%5d=x&things%5b%bd=y


Is het gebruik van de [] om een array te versturen (dus "?array[]=value") een specifieke feature van PHP? :+
Is dit uberhaupt wel in een RFC beschreven?


Ben benieuwd of iemand hier duidelijkheid over kan verschaffen :D

[ Voor 26% gewijzigd door kingmuze op 09-05-2006 14:20 ]

[gvr]muze[nl] says: fear is the mind killer


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 20-02 03:31

Gerco

Professional Newbie

Maar waarom moet je [ en ] dan encoden? Ze hebben geen speciale betekenis en dus kun je ze gewoon zo in de URL zetten toch? Als je 1 van die speciale karakters wilt gebruiken moet je die coderen ja, maar de rest toch niet? Anders kun je a-z0-9 ook wel gaan coderen, die hebben ook geen speciale betekenis.
Octets must be encoded if they have no corresponding graphic character within the US-ASCII coded character set, if the use of the corresponding character is unsafe, or if the corresponding character is reserved for some other interpretation within the particular URL scheme.
Geen van deze dingen is hier van toepassing lijkt me, niet encoden dus?

[edit]Mods die hun eigen posts gaan verwijderen. Het moet niet gekker worden...

[ Voor 50% gewijzigd door Gerco op 09-05-2006 13:43 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Osiris
  • Registratie: Januari 2000
  • Niet online
RFC 1738 - Uniform Resource Locators (URL)

Daar staat vást wel iets in over wat je wel en niet moet encoden.

[ Voor 21% gewijzigd door Osiris op 09-05-2006 13:45 ]


  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 20:37

Gonadan

Admin Beeld & Geluid, Harde Waren
Volgens mij klopt die encoded url niet eens? :?
%5b is de hexadecimale waarde van 91, dat staat voor [ in de ascii tabel
Dus %bd zou dan %5d moeten zijn, 93 voor ].
:)

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 20-02 03:31

Gerco

Professional Newbie

Hmm, ze zijn dus wel unsafe:
Other characters are unsafe because gateways and other transport agents are known to sometimes modify such characters. These characters are "{", "}", "|", "\", "^", "~", "[", "]", and "`".

[ Voor 52% gewijzigd door Gerco op 09-05-2006 13:45 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Gerco schreef op dinsdag 09 mei 2006 @ 13:40:
[edit]Mods die hun eigen posts gaan verwijderen. Het moet niet gekker worden...
Sorry. Ik praatte gewoon onzin. :P

Ik weet niet of het wat te maken heeft met bovengenoemde, maar er zijn natuurlijk méér tekens dan alleen de ;, /, ?, :, @, = en & die encoded horen te worden. Neem bijvoorbeeld de spatie.

'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.


  • kingmuze
  • Registratie: Februari 2003
  • Laatst online: 05-11-2025

kingmuze

so don't fear

Topicstarter
-NMe- schreef op dinsdag 09 mei 2006 @ 13:48:
[...]

Sorry. Ik praatte gewoon onzin. :P

Ik weet niet of het wat te maken heeft met bovengenoemde, maar er zijn natuurlijk méér tekens dan alleen de ;, /, ?, :, @, = en & die encoded horen te worden. Neem bijvoorbeeld de spatie.
Inderdaad, daarom had ik ze ook encode, foutje in de topicstart.

Maar dan resten de vragen nog wel:
Is het een PHP feature of werkt dit ook in ASP, JSP of .NET?
Is er een RFC over.

[ Voor 53% gewijzigd door kingmuze op 09-05-2006 14:17 ]

[gvr]muze[nl] says: fear is the mind killer


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 20-02 03:31

Gerco

Professional Newbie

Die RFC heb je zelf gelinked :) Die is er dus wel. Je wilt misschien weten of die variable[]=waarde een PHP-only feature is? vziw wel. Dat URLDecoden lijkt me geen PHP feature, aangezien dat gewoon in de RFC staat en elke HTTP server daaraan moet voldoen, ook servers die ASP, .NET of Python draaien.

[ Voor 40% gewijzigd door Gerco op 09-05-2006 14:19 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 20:37

Gonadan

Admin Beeld & Geluid, Harde Waren
Hij maakt er als het goed is gewoon hexadecimale waarden van de ascii-waarde van het karakter van.
Dan maakt het dus niet uit welke programmeertaal je gebruikt om hem te decoden. :)
Gerco schreef op dinsdag 09 mei 2006 @ 14:17:
Die RFC heb je zelf gelinked :) Die is er dus wel. Je wilt misschien weten of die variable[]=waarde een PHP-only feature is? vziw wel.
Dat is inderdaad wel taal-specifiek :D

[ Voor 44% gewijzigd door Gonadan op 09-05-2006 14:19 ]

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • kingmuze
  • Registratie: Februari 2003
  • Laatst online: 05-11-2025

kingmuze

so don't fear

Topicstarter
Gerco schreef op dinsdag 09 mei 2006 @ 14:17:
Die RFC heb je zelf gelinked :) Die is er dus wel. Je wilt misschien weten of die variable[]=waarde een PHP-only feature is? vziw wel. Dat URLDecoden lijkt me geen PHP feature, aangezien dat gewoon in de RFC staat en elke HTTP server daaraan moet voldoen, ook servers die ASP, .NET of Python draaien.
Inderdaad,

Is het gebruik van [] om een array mee te geven een PHP functie?
Gonadan schreef op dinsdag 09 mei 2006 @ 14:18:
Hij maakt er als het goed is gewoon hexadecimale waarden van de ascii-waarde van het karakter van.
Dan maakt het dus niet uit welke programmeertaal je gebruikt om hem te decoden. :)


[...]

Dat is inderdaad wel taal-specifiek :D
Waar kan ik er informatie over vinden (Er is toch wel documentatie van hè }) lol!) . Ik heb het nu gebruikt in een produkt, maar het kan problemen opleveren waarneer het produkt omgezet wordt in bijvoorbeeld JSP.

[ Voor 38% gewijzigd door kingmuze op 09-05-2006 14:34 ]

[gvr]muze[nl] says: fear is the mind killer


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 19:23
Onderaan RFC 1738 staan hele nette productieregels waarmee je kunt bepalen wat wel en niet toegestaan is. Voor HTTP:
httpurl = "http://" hostport [ "/" hpath [ "?" search ]]
hpath = hsegment *[ "/" hsegment ]
hsegment = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
search = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "="
hex = digit | "A" | "B" | "C" | "D" | "E" | "F" |
"a" | "b" | "c" | "d" | "e" | "f"
escape = "%" hex hex

lowalpha = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" |
"i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" |
"q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" |
"y" | "z"
hialpha = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" |
"J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" |
"S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"

alpha = lowalpha | hialpha
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" |
"8" | "9"
safe = "$" | "-" | "_" | "." | "+"
extra = "!" | "*" | "'" | "(" | ")" | ","
national = "{" | "}" | "|" | "\" | "^" | "~" | "[" | "]" | "`"
punctuation = "<" | ">" | "#" | "%" | <">

unreserved = alpha | digit | safe | extra
uchar = unreserved | escape
xchar = unreserved | reserved | escape
digits = 1*digit
Zoals je ziet worden alle toegestane karakters expliciet genoemd (alfanumerieke karakters, getallen, en een aantal extra karakters). Dingen als spaties (en unicode karakters e.d.) worden helemaal niet genoemd dus die moet je sowieso coderen. Verder moet je karakters die in HTTP een speciale betekenis hebben ook coderen als je ze wil gebruiken, zoals bijvoorbeeld de / om paden te scheiden (mocht je een segment hebben dat een '/' in z'n naam heeft).

Kort gezegd heeft de betekenis die PHP aan die brackets toekent niet met de specificaties voor URL's of het HTTP protocol te maken. Het is in de kern puur een PHP-feature (die misschien toevallig gedeeld wordt door andere applicaties).

Aangezien de brackets niet mogen voorkomen in een HTTP URL, moet je ze dus escapen! In de praktijk pikken browsers ook gewoon onjuiste URL's (met spaties erin bijvoorbeeld) waardoor het wel werkt, maar officieel is dat dus niet goed.

[ Voor 34% gewijzigd door Soultaker op 09-05-2006 16:02 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 20:34

crisp

Devver

Pixelated

De PHP feature wordt overigens hier uitgelegd

Intentionally left blank


  • kingmuze
  • Registratie: Februari 2003
  • Laatst online: 05-11-2025

kingmuze

so don&#039;t fear

Topicstarter
Thanks voor jullie hulp :D nu is het een stuk duidelijker. Nou rest nog één vraag, hoe bouw je een dergelijke constructie voor bijvoorbeeld JSP als je de volgende informatie wil oversturen:

user 1 met eigenschappen name = piet, age is 20
user 2 met eigenschappen name= kees, age is 21

Voorheen bouwde ik een URL als:
code:
1
?users[]=1&users[]=2&1name=piet&2name=kees&1age=20&2age=21

[gvr]muze[nl] says: fear is the mind killer


Verwijderd

semi-offtopic:
Bouw je URL dan netjes op ipv op deze manier :+
code:
1
?users[]=1&users[]=2&name[]=piet&name[]=kees&age[]=20&age[]=21

PHP:
1
2
3
4
foreach ($_GET['users'] AS $th_key => $th_val) {
  echo $_GET['name'][$th_key];
  echo $_GET['age'][$th_key];
}

Dat is een stuk handiger en duidelijker voor jezelf denk ik zo :)

  • kingmuze
  • Registratie: Februari 2003
  • Laatst online: 05-11-2025

kingmuze

so don&#039;t fear

Topicstarter
Verwijderd schreef op dinsdag 09 mei 2006 @ 19:12:
semi-offtopic:
Bouw je URL dan netjes op ipv op deze manier :+
code:
1
?users[]=1&users[]=2&name[]=piet&name[]=kees&age[]=20&age[]=21

PHP:
1
2
3
4
foreach ($_GET['users'] AS $th_key => $th_val) {
  echo $_GET['name'][$th_key];
  echo $_GET['age'][$th_key];
}

Dat is een stuk handiger en duidelijker voor jezelf denk ik zo :)
Hehe, ja dat dacht ik ook, als je zeker weet dat het in die volgorde wordt uitgelezen maar dat weet je niet dus weet je ook niet zeker of dit werkt.

[gvr]muze[nl] says: fear is the mind killer

Pagina: 1