php – urlencode只有URL的目录和文件名

前端之家收集整理的这篇文章主要介绍了php – urlencode只有URL的目录和文件名前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要使用 PHP对URL的目录路径和文件名进行URL编码.

所以我想编写一个像http://example.com/file name这样的东西,并且它的结果是http://example.com/file的名字.

当然,如果我做urlencode(‘http://example.com/file name’);那么我最后使用http://example.com/file名称.

明显的(对我来说,反正)解决方案是使用parse_url()将URL分解为scheme,host等,然后只是urlencode()需要它的部分像路径.然后,我将使用http_build_url()重新组合URL.

有比这更优雅的解决方案吗?还是基本上要走的路?

@deceze肯定让我走正确的道路,所以去upvote他的答案.但这是正是有用的:
$encoded_url = preg_replace_callback('#://([^/]+)/([^?]+)#',function ($match) {
                return '://' . $match[1] . '/' . join('/',array_map('rawurlencode',explode('/',$match[2])));
            },$unencoded_url);

有几件事要注意:

> http_build_url需要一个PECL安装,所以如果你正在分发你的代码给他人(我在这种情况下),你可能想避免它,并坚持使用reg exp解析,就像我在这里(从@ deceze的答案中大量窃取 – 去upvote那件事).> urlencode()不行!您需要使用rawurlencode()作为路径,以便空格得到编码.将空格编码为查询字符串,但对路径不太热.>这对于需要用户名/密码编码的URL不起作用.对于我的用例,我不认为我在乎那些,所以我不担心.但是,如果您的用例在这方面是不同的,那么您需要照顾.

原文链接:https://www.f2er.com/php/131091.html

猜你在找的PHP相关文章