login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Vreemde tekens in URL

Offline xSc - 19/10/2006 15:23
Avatar van xScOnbekend Hey,

ik loop heel vaak tegen dit probleem aan.

In mijn url komen tekens voor als &, >, ', etc. Ik codeer dit met urlencode() en decodeer dit met urldecode(), maar toch breekt de query af. Wat kan ik hieraan doen?

11 antwoorden

Gesponsorde links
Offline Thomas - 19/10/2006 15:27
Avatar van Thomas Moderator Welke query breekt af?
Wellicht moet je ook rekening houden met de character-set die je gebruikt?
Offline xSc - 19/10/2006 15:35
Avatar van xSc Onbekend mijn karakterset is latin1_swedish_ci

SELECT col1 FROM table WHERE col2 = 'e & h'

wordt uitgevoerd als:

SELECT col1 FROM table WHERE col2 = 'e '

Hetzelfde geldt voor andere vreemd tekens.
Offline Thomas - 19/10/2006 16:15
Avatar van Thomas Moderator Al geprobeerd deze te escapen met \ ofzo?
Offline xSc - 19/10/2006 16:23 (laatste wijziging 20/10/2006 09:49)
Avatar van xSc Onbekend Ik heb het nog even nagekeken, maar misschien is het probleem mod_rewrite

Ik herschrijf dus bijv. index.php?var1=test&var2=test naar /test/test/

Maar goed. Nu kunnen de parameters vreemde tekens bevatten, zoals &, >, <, etc.

Stel ik heb als http://myurl.be/test/test_%26_test/ en ik doe

echo urldecode($_GET['var2'])

dan krijg ik test_ terug

Dat gebeurt ook wanneer ik $_GET['var2'] echo zonder urldecode().

Het gaat dus fout in de url.
Offline Thomas - 20/10/2006 09:54
Avatar van Thomas Moderator Welke karakters match je allemaal voor var1, var2 etc?

Misschien moet je urlencode gebruiken voor hyperlinks met dit soort karakters, anders kan mod_rewrite er geen chocola meer van maken?

Ik gebruik voor mijn sites een functie die een hyperlink genereert - dit is misschien ook een idee voor jou, dan kun je hier allerlei vertaalstappen inbouwen indien nodig.
Offline xSc - 20/10/2006 09:57 (laatste wijziging 20/10/2006 09:58)
Avatar van xSc Onbekend @FangorN, ik maak ook gebruik van url_encode(). Die genereert dus die %26 voor een ampersand.

Het zal dus hierin zitten:

RewriteEngine On

RewriteRule ^(.*)/(.*)/$ index.php?sP1=$1&sP2=$2 [L]
RewriteRule ^(.*)/$ index.php?sP1=$1 [L]

Het is overigens wel zo dat urlencode() / urldecode() goed omgaan met < en >, maar niet met &
Offline Thomas - 20/10/2006 10:41 (laatste wijziging 20/10/2006 10:41)
Avatar van Thomas Moderator Misschien moet je de [NE] (no-escape) flag gebruiken (i.c.m. urlencode die je al gebruikt)?

Zie de Apache-site.
Offline xSc - 20/10/2006 11:06
Avatar van xSc Onbekend Hoi FangorN, bedankt!

Ik heb NE toegepast, maar i.c.m. andere flags krijg ik een 500-error.

RewriteEngine On

RewriteRule ^(.*)/(.*)/$ index.php?sP1=$1&sP2=$2 [NE, L]
RewriteRule ^(.*)/$ index.php?sP1=$1 [NE, L]

[NE] alleen gaat goed, maar dan worden de parameter natuurlijk niet goed uitgelezen.
Offline Thomas - 20/10/2006 11:58
Avatar van Thomas Moderator Helpt het verwijderen van de spaties tussen "NE," en "L"?
Offline xSc - 20/10/2006 13:06
Avatar van xSc Onbekend Oke FangorN, dat was inderdaad het probleem. Maar goed, vreemde tekens werken keurig, maar & valt daarbuiten.

Nu wordt inderdaad < direct vervangen door zo'n code:

http://myurl.be/test/test<test/

wordt direct

http://myurl.be/test/test+%3C+test/

maar & wordt niet vervangen en dat geeft dus nog steeds hetzelfde probleem, ook al doe ik:

http://myurl.be/test/test+%26+test/
Offline Thomas - 20/10/2006 13:55
Avatar van Thomas Moderator Van PHP.net
Citaat:
Note: Be careful about variables that may match HTML entities. Things like &amp, &copy and &pound are parsed by the browser and the actual entity is used instead of the desired variable name. This is an obvious hassle that the W3C has been telling people about for years. The reference is here: http://www.w3.o...ml#h-B.2.2. PHP supports changing the argument separator to the W3C-suggested semi-colon through the arg_separator .ini directive. Unfortunately most user agents do not send form data in this semi-colon separated format. A more portable way around this is to use &amp; instead of & as the separator. You don't need to change PHP's arg_separator for this. Leave it as &, but simply encode your URLs using htmlentities() or htmlspecialchars().
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.283s