是否有任何简洁明了的urlencode()
任意字符串,但只留下斜杠(/
)?
答案 0 :(得分:17)
/
urlencode()
每个部分/
答案 1 :(得分:9)
你可以这样做:
$url = "http://www.google.com/myprofile/id/1001";
$encoded_url = urlencode($url);
$after_encoded_url = str_replace("%2F", "/", $url);
答案 2 :(得分:3)
基本上@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';
如果字符串已经编码,也可能需要在编码前解码。
答案 3 :(得分:1)
我想您正在尝试对整个HTTP网址进行编码。
我认为对整个HTTP URL进行编码的最佳解决方案是严格遵循浏览器。
如果您只跳过斜线,那么如果URL已经被编码,则会出现双重编码问题。
而且,如果网址中有一些参数(网址中有?
,&
,=
,#
),编码将断开链接。
浏览器仅编码,
"
,<
,>
,`
和多字节字符。 (将所有符号复制到浏览器中,您将获得列表)
您只需要对这些字符进行编码。
echo preg_replace_callback("/[\ \"<>`\\x{0080}-\\x{FFFF}]+/u", function ($match) {
return rawurlencode($match[0]);
}, $path);
答案 4 :(得分:0)
是的,通过在用斜线组装它们之前正确地转出各个部件:
$url = urlencode($foo) . '/' . urlencode($bar) . '/' . urlencode($baz);
答案 5 :(得分:0)
$ encoded = implode(“/”,array_map(function($ v){return urlencode($ v);},split(“/”,$ url)));
这将拆分字符串,对部件进行编码并再次将字符串连接在一起。