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.
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 = "$" | "-" | "_" | "." | "+"
What about rawurlencode()
.
http://www.php.net/manual/en/function.rawurlencode.php
echo rawurlencode('http://my.site/search/this-is-a-search');
// http%3A%2F%2Fmy.site%2Fsearch%2Fthis-is-a-search