PHP URL编码保留无效的URL字符

时间:2010-06-11 04:43:50

标签: php http

我需要用url有效的url替换url无效字符,然后再将其转换回来。

这是针对搜索页面,其中包含http://my.site/search/this-is-a-search等网址,搜索表单为POSTS,然后用户重定向到新网址。

Php具有urlencode和urldecode函数,但这些函数根本不起作用,并在我的url中留下无效字符。

当然,我不需要在这里重新发明轮子。

2 个答案:

答案 0 :(得分:3)

对于http://my.site/search/this-is-a-search之类的内容(例如,在查询字符串之外),您应该使用rawurlencoderawurldecode。这些保证是URL安全的。

但是,urlencode也永远不会生成不安全的URL路径,因为唯一的区别是空格的编码方式和urlencode将空格编码为+,这在URL路径中是允许的

来自RFC 1738:

httpurl        = "http://" hostport [ "/" hpath [ "?" search ]]
hpath          = hsegment *[ "/" hsegment ]
hsegment       = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
uchar          = unreserved | escape
unreserved     = alpha | digit | safe | extra
safe           = "$" | "-" | "_" | "." | "+"

答案 1 :(得分:1)

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