Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP URL encoding retaining invalid url characters

Tags:

http

php

I need to replace url invalid characters with something url valid then convert it back again.

This is for a search page with a url like http://my.site/search/this-is-a-search, the search form POSTS then the user redirected to the new url.

Php has functions urlencode and urldecode however these do not work at all, and leave invalid characters in my url.

Surely I don't need to reinvent the wheel here.

like image 704
Keyo Avatar asked Sep 06 '25 03:09

Keyo


1 Answers

For stuff like http://my.site/search/this-is-a-search (i.e., outside the query string), you should use rawurlencode and rawurldecode. These are guaranteed to be URL-safe.

However, urlencode will never generate an unsafe URL path either, since the only difference is how spaces are encoded and urlencode encodes spaces to +, which is permitted in the URL path.

From RFC 1738:

httpurl        = "http://" hostport [ "/" hpath [ "?" search ]]
hpath          = hsegment *[ "/" hsegment ]
hsegment       = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
uchar          = unreserved | escape
unreserved     = alpha | digit | safe | extra
safe           = "$" | "-" | "_" | "." | "+"
like image 90
Artefacto Avatar answered Sep 07 '25 17:09

Artefacto