是否有任何干净,简单的方法urlencode()
任意字符串,但留下斜线(/
)?
/
分裂urlencode()
每个部分/
你可以这样做:
$url = "http://www.google.com/myprofile/id/1001";
$encoded_url = urlencode($url);
$after_encoded_url = str_replace("%2F", "/", $url);
基本上@clovecooks说的是,但是自从5.3开始不推荐使用split():
$path = '/path with some/illegal/characters.html';
$parsedPath = implode('/', array_map(function ($v) {
return rawurlencode($v);
}, explode('/', $path)));
// $parsedPath == '/path%20with%20some/illegal/characters.html';
如果字符串已经编码,也可能希望在编码之前解码。
我想您正在尝试编码整个HTTP URL。
我认为编码整个HTTP URL的最佳解决方案是严格遵循浏览器。
如果你只是跳过斜杠,那么如果网址已被编码,你将会遇到双重编码问题。
如果url中有一些参数,(?
,&
,=
,#
都在url中),编码将破坏链接。
浏览器只编码,
"
,<
,>
,`
和多字节字符。 (将所有符号复制到浏览器,您将获得列表)
您只需要编码这些字符。
echo preg_replace_callback("/[\ \"<>`\\x{0080}-\\x{FFFF}]+/u", function ($match) {
return rawurlencode($match[0]);
}, $path);
是的,通过在用斜线组装之前正确地转出各个部件:
$url = urlencode($foo) . '/' . urlencode($bar) . '/' . urlencode($baz);
$ encoded = implode(“/”,array_map(function($ v){return urlencode($ v);},split(“/”,$ url)));
这将拆分字符串,对部件进行编码并再次将字符串连接在一起。