[PHP / FireFox / IE] rare tekens in URL filteren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • iMars
  • Registratie: Augustus 2001
  • Laatst online: 01:38

iMars

Full time prutser

Topicstarter
Ik zit me hier suf te prakkeseren wat er nou gebeurd, maar kan het even niet plaatsen.

Ik wil een naam uit een url kunnen filteren.
Voorbeeld:
Als ik in een browser een url intik als http://www.domein.xxx/plezier-met-zijn-tweëen
Dan vang ik deze pagina op door index.php als errordoc op te geven.
Doormiddel van $_SERVER['REQUEST_URI'] vang ik de naam op.

Dit werkt allemaal prima, behalve als er tekens als ëéèöóü etc. gebruikt worden.

Na een klein beetje zoekwerk zag ik op php.net de functie urldecode().
Nou werkt dit in FireFox, maar IExplorer wil er niks van weten.

Als ik met IExplorer naar zo'n url ga, krijg ik "plezier-met-zijn-tweëen" als resultaat, terwijl als ik met FireFox naar zo'n url ga, krijg ik wel "plezier-met-zijn-tweëen"

Weet iemand een oplossing voor mij? Kennelijk zie ik iets over het hoofd.

Systeem gegevens:
Windows XP pro + SP2
Alle recente updates
FireFox 1.5

edit:
Even een toelichting...
Wat ik wil is dat ik de text als een string kan gebruiken om in een database op te zoeken.
En in de database staan letterlijk de tekens als öëüïóíú enz.

[ Voor 12% gewijzigd door iMars op 08-12-2005 11:21 ]

Koop hier mijn P1 reader :)


Acties:
  • 0 Henk 'm!

  • Superdeboer
  • Registratie: December 2002
  • Niet online

Superdeboer

Sa-weee-tah

Probeer urlencode() eens. :)
Description
string urlencode ( string str )

Returns a string in which all non-alphanumeric characters except -_. have been replaced with a percent (%) sign followed by two hex digits and spaces encoded as plus (+) signs. [...] This function is convenient when encoding a string to be used in a query part of a URL, as a convenient way to pass variables to the next page.

When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.


Acties:
  • 0 Henk 'm!

  • iMars
  • Registratie: Augustus 2001
  • Laatst online: 01:38

iMars

Full time prutser

Topicstarter
Ja, sorry mijn fout, ik had natuurlijk wel even moeten opgeven wat ik nog meer heb geprobeerd:

Explorer geeft het volgende:
zoals het is: plezier-met-zijn-twe%C3%ABen
urlencode: plezier-met-zijn-twe%25C3%25ABen
urldecode: plezier-met-zijn-tweëen
rawurldecode: plezier-met-zijn-tweëen
rawurlencode: plezier-met-zijn-twe%25C3%25ABen

FireFox geeft het volgende:
zoals het is: plezier-met-zijn-twe%EBen
urlencode: plezier-met-zijn-twe%25EBen
urldecode: plezier-met-zijn-tweëen
rawurldecode: plezier-met-zijn-tweëen
rawurlencode: plezier-met-zijn-twe%25EBen

Koop hier mijn P1 reader :)


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20-09 23:58

TeeDee

CQB 241

Een vraag: Jij wil "mooie" urls gebruiken? Tenminste, dat begrijp ik uit je verhaal mbt het opgeven van index.php als errordoc gebruiken.

Waarom neem je dan niet mod_Rewrite of iets soortgelijks?

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • iMars
  • Registratie: Augustus 2001
  • Laatst online: 01:38

iMars

Full time prutser

Topicstarter
TeeDee schreef op donderdag 08 december 2005 @ 11:26:
Een vraag: Jij wil "mooie" urls gebruiken? Tenminste, dat begrijp ik uit je verhaal mbt het opgeven van index.php als errordoc gebruiken.

Waarom neem je dan niet mod_Rewrite of iets soortgelijks?
Yup, you got me there! Ik gebruik geen mod_Rewrite om een paar redenen:
1) ik heb daar te weinig kennis van
2) er wordt niet altijd hier gebruik van gemaakt
3) het gaat maar om één variabele.

Koop hier mijn P1 reader :)


Acties:
  • 0 Henk 'm!

  • Superdeboer
  • Registratie: December 2002
  • Niet online

Superdeboer

Sa-weee-tah

Wat bedoel je precies met "geeft het volgende"?
Je haalt op index.php die REQUEST_URI op en die echo je dan meteen daar? En daar zijn bovenstaande rijtjes dus de resultaten van nadat je die REQUEST_URI door die functies heen hebt getrokken?

Het feit dat IE bij 'zoals het is' %C3%AB voor dat karakter neerzet en Firefox %EB, lijkt mij dan meer op een kwestie van karakter-encodering...
Zet eens bovenaan al de scripts die hiermee te maken hebben:
PHP:
1
header('Content-Type: text/html; charset=iso-8859-1');

When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20-09 23:58

TeeDee

CQB 241

webmail schreef op donderdag 08 december 2005 @ 11:28:
[...]
Yup, you got me there! Ik gebruik geen mod_Rewrite om een paar redenen:
1) ik heb daar te weinig kennis van
2) er wordt niet altijd hier gebruik van gemaakt
3) het gaat maar om één variabele.
Nooit te oud om te leren ;)

Verder zou ik de tip van SuperDeBoer eens proberen.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • iMars
  • Registratie: Augustus 2001
  • Laatst online: 01:38

iMars

Full time prutser

Topicstarter
Superdeboer schreef op donderdag 08 december 2005 @ 11:30:
Wat bedoel je precies met "geeft het volgende"?
Je haalt op index.php die REQUEST_URI op en die echo je dan meteen daar? En daar zijn bovenstaande rijtjes dus de resultaten van nadat je die REQUEST_URI door die functies heen hebt getrokken?

Het feit dat IE bij 'zoals het is' %C3%AB voor dat karakter neerzet en Firefox %EB, lijkt mij dan meer op een kwestie van karakter-encodering...
Zet eens bovenaan al de scripts die hiermee te maken hebben:
PHP:
1
header('Content-Type: text/html; charset=iso-8859-1');
Aaai... daar heb ik helemaal niet aangedacht.
De index geeft inprincipe geen output, maar redirect.
Er wordt helemaal géén output dan in de index gegenereerd. De gegevens laat ik tijdelijk naar mijzelf toe mailen, om te checken.

Gelijk even proberen!

edit:
Darn!!! werkt niet, maar het is denk wel iets in deze trant...
ik heb header('Content-Type: text/html; charset=iso-8859-1'); en header('Content-Type: text/html; charset=UTF-8'); geprobeerd, geen van beide een succes :(

[ Voor 14% gewijzigd door iMars op 08-12-2005 11:41 ]

Koop hier mijn P1 reader :)


Acties:
  • 0 Henk 'm!

  • Superdeboer
  • Registratie: December 2002
  • Niet online

Superdeboer

Sa-weee-tah

Doe in plaats van én redirecten én mailen etc. gewoon eens heel simpel een echo van $_SERVER['REQUEST_URI'] in je index.php. Dat debugt een stuk makkelijker, dan weet je in ieder geval zeker dat er bij het redirecten niets mis gaat, als je dan nog steeds die rare tekens krijgt.

When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.


Acties:
  • 0 Henk 'm!

  • iMars
  • Registratie: Augustus 2001
  • Laatst online: 01:38

iMars

Full time prutser

Topicstarter
Zal ff de stuk code laten zien waarmee ik de pagina opzoek.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?
#######################################################
## DATABASE OPENEN
$DBHost = "localhost";
$DBLogin = "******";
$DBPassword = "******";
$DBDatabase = "******";
@mysql_connect("$DBHost", "$DBLogin", "$DBPassword") or die ("Error ocurred when connecting to mysql server.");
@mysql_select_db("$DBDatabase") or die ("Error ocurred when selecting database.");  
##
#######################################################


header('Content-Type: text/html; charset=iso-8859-1');

$dir="html";
$arrRequest = explode("/", substr(addslashes(urldecode($_SERVER['REQUEST_URI'])),1));
//print_r($arrRequest);

// als spatie in term zit converteer dan naar %20
$arrRequest[0]=str_replace("%20"," ",$arrRequest[0]);

// start pagina
$strViewSQL = "SELECT paginaId FROM pagina where status=0 AND strRedirect LIKE '".$arrRequest[0]."'";
$oPagina = mysql_query($strViewSQL);
if($oPagina && mysql_num_rows($oPagina)>0) $arrResPagina = mysql_fetch_assoc($oPagina);
// end pagina

.
.
.
// include pagina
.
.
.

?>

Koop hier mijn P1 reader :)


Acties:
  • 0 Henk 'm!

  • iMars
  • Registratie: Augustus 2001
  • Laatst online: 01:38

iMars

Full time prutser

Topicstarter
Superdeboer schreef op donderdag 08 december 2005 @ 11:48:
Doe in plaats van én redirecten én mailen etc. gewoon eens heel simpel een echo van $_SERVER['REQUEST_URI'] in je index.php. Dat debugt een stuk makkelijker, dan weet je in ieder geval zeker dat er bij het redirecten niets mis gaat, als je dan nog steeds die rare tekens krijgt.
Gedaan...

http://www.domein.xxx/hanencursus-praten-doe-je-met-tweeën.cursus

print_r($_SERVER['REQUEST_URI']) geeft in explorer:
Array ( [0] => hanencursus-praten-doe-je-met-twee%C3%ABn.cursus )
en in FireFox:
Array ( [0] => hanencursus-praten-doe-je-met-twee%EBn.cursus )

$arrRequest = explode("/", substr(addslashes(urldecode($_SERVER['REQUEST_URI'])),1));
print_r($arrRequest) geeft in explorer:
Array ( [0] => hanencursus-praten-doe-je-met-tweeën.cursus )
en in FireFox:
Array ( [0] => hanencursus-praten-doe-je-met-tweeën.cursus )

Het toevoegen van header('Content-Type: text/html; charset=iso-8859-1') blijkt geen effect te hebben :'(

edit:

Ik heb wat gevonden...
http://www.domein.xxx/han...oe-je-met-twee%EBn.cursus
Doet het wel in explorer, en in firefox. Moet ik dus alle linken met urlencode aanmaken ...

[ Voor 13% gewijzigd door iMars op 08-12-2005 12:07 ]

Koop hier mijn P1 reader :)


Acties:
  • 0 Henk 'm!

  • Superdeboer
  • Registratie: December 2002
  • Niet online

Superdeboer

Sa-weee-tah

Juist... dat bedoelde ik dus:
Superdeboer:
Probeer urlencode() eens. :)
[...]
Pagina's in je adresbalk opvragen met ë, é, è, ê, of wat dan ook van die aard, werkt niet, simpelweg omdat die karakters niet mogen in URL's. (De enige reden die ik kan verzinnen waarom het in Firefox wel werkt, is dat die browser misschien clientside een urlencode uitvoert of iets dergelijks...)
Om toch naar locaties en bestanden met zulke karakters in de naam te kunnen linken, zul je dus inderdaad op de link zelf al een urlencode uit moeten voeren, zodat in de adresbalk van de browser de ge-encodeerde vorm van het niet toegestane karakter komt te staan. ;)

When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.


Acties:
  • 0 Henk 'm!

Verwijderd

webmail schreef op donderdag 08 december 2005 @ 11:19:
Ja, sorry mijn fout, ik had natuurlijk wel even moeten opgeven wat ik nog meer heb geprobeerd:

Explorer geeft het volgende:
urldecode: plezier-met-zijn-tweëen
rawurldecode: plezier-met-zijn-tweëen

FireFox geeft het volgende:
urldecode: plezier-met-zijn-tweëen
rawurldecode: plezier-met-zijn-tweëen
Characterset in IE staat op latin1 (iso-8whatever-1) dit moet utf-8 zijn
Zet de juiste contentType in je html...

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Superdeboer schreef op donderdag 08 december 2005 @ 12:20:
Pagina's in je adresbalk opvragen met ë, é, è, ê, of wat dan ook van die aard, werkt niet, simpelweg omdat die karakters niet mogen in URL's. (De enige reden die ik kan verzinnen waarom het in Firefox wel werkt, is dat die browser misschien clientside een urlencode uitvoert of iets dergelijks...)
Om toch naar locaties en bestanden met zulke karakters in de naam te kunnen linken, zul je dus inderdaad op de link zelf al een urlencode uit moeten voeren, zodat in de adresbalk van de browser de ge-encodeerde vorm van het niet toegestane karakter komt te staan. ;)
Het is offtopic, maar komt denk ik door wat anders, weet alleen de naam er niet van...
Komt erop neer dat er nu geen URLs kunnen zoals bijv. http://www.münchen.de en met een protocol (waar ik dus de naam van kwijt ben, kan dat wél) FireFox heeft daar ondersteuning voor, maar IE niet... ;)

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20-09 23:58

TeeDee

CQB 241

Verwijderd schreef op donderdag 08 december 2005 @ 13:01:
[...]

Characterset in IE staat op latin1 (iso-8whatever-1) dit moet utf-8 zijn
Zet de juiste contentType in je html...
Dit stond al in het topic. UTF8 en ISO8859-1) waren al reeds geprobeerd.
Het probleem was hier urlencode.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

Verwijderd

TeeDee schreef op donderdag 08 december 2005 @ 13:25:
Dit stond al in het topic. UTF8 en ISO8859-1) waren al reeds geprobeerd.
Het probleem was hier urlencode.
Enkel als header geprobeerd, ik spreek over html...
De juiste encoding betreft hier utf-8

Acties:
  • 0 Henk 'm!

  • iMars
  • Registratie: Augustus 2001
  • Laatst online: 01:38

iMars

Full time prutser

Topicstarter
GJ-tje schreef op donderdag 08 december 2005 @ 13:10:
[...]
Het is offtopic, maar komt denk ik door wat anders, weet alleen de naam er niet van...
Komt erop neer dat er nu geen URLs kunnen zoals bijv. http://www.münchen.de en met een protocol (waar ik dus de naam van kwijt ben, kan dat wél) FireFox heeft daar ondersteuning voor, maar IE niet... ;)
Kijk dat is duidelijk. Thanks voor de link!
Verwijderd schreef op donderdag 08 december 2005 @ 13:30:
[...]
Enkel als header geprobeerd, ik spreek over html...
De juiste encoding betreft hier utf-8
Hoe kan je dat instellen? Ik wil namelijk niet al beginnen met een 'output' ...
Eerst alle info opvragen, daarna pas de content uitspugen.

B.t.w., hoe is het dan mogelijk om via $_GET variabeles te sturen zoals öüë, als explorer het niet doet en firefox wel?

Koop hier mijn P1 reader :)


Acties:
  • 0 Henk 'm!

  • Superdeboer
  • Registratie: December 2002
  • Niet online

Superdeboer

Sa-weee-tah

Verwijderd schreef op donderdag 08 december 2005 @ 13:30:
Enkel als header geprobeerd, ik spreek over html...
De juiste encoding betreft hier utf-8
Euh, met html doel je op het opnemen van een meta-element? Als je daar de juiste header voor gebruikt heb je dat hele meta-element niet meer nodig. Overigens leidt een wijziging van de content encoding er natuurlijk niet toe dat een karakter als ë geldig is in een URL. ;)
Ik begreep het probleem eerst ook niet goed, en meende ook dat het probleem van de topicstarter erin zat dat een echo van $_SERVER['REQUEST_URI'] in twee browsers verschillend weergegeven werd; waarbij de content encoding dus wél een rol zou spelen.

Het blijkt uiteindelijk te gaan om de kwestie dat de REQUEST_URI rare tekens bevat (namelijk een encodering) wanneer een locatie met een ongeldig karakter wordt opgevraagd en dat deze tekens frappant genoeg verschillen, afhankelijk van de gebruikte browser. Bij decodering van die waarde blijkt dat Firefox het wel een door de TS gewenst resultaat geeft en IE niet.
Een oplossing daarvoor is dus om je link te encoderen voordat je 'm print en opent. :)
webmail:
B.t.w., hoe is het dan mogelijk om via $_GET variabeles te sturen zoals öüë, als explorer het niet doet en firefox wel?
Nou... clientside encoderen en serverside decoderen dus. Ofwel: je link encoderen voordat je 'm in de pagina zet; en dan in je script waar je die get-variabele uitleest eerst die querystring weer decoderen. Lees nou gewoon urlencode()even. ;)

When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.


Acties:
  • 0 Henk 'm!

  • iMars
  • Registratie: Augustus 2001
  • Laatst online: 01:38

iMars

Full time prutser

Topicstarter
Superdeboer schreef op donderdag 08 december 2005 @ 14:10:
[...]


Nou... clientside encoderen en serverside decoderen dus. Ofwel: je link encoderen voordat je 'm in de pagina zet; en dan in je script waar je die get-variabele uitleest eerst die querystring weer decoderen. Lees nou gewoon urlencode()even. ;)
Thnx voor alle uitleg, ik heb het inderdaad ge-encodeerd voordat de linkjes gemaakt worden (paar posts terug ;)).

Koop hier mijn P1 reader :)

Pagina: 1