PHP urlencode - 仅编码文件名,不要触摸斜杠

Win*_*ith 7 php url encoding encode urlencode

http://www.example.com/some_folder/some file [that] needs "to" be (encoded).zip
urlencode($myurl);
Run Code Online (Sandbox Code Playgroud)

问题是,urlencode还将编码使URL无法使用的斜杠.我怎么能只编码最后的文件名?

duc*_*cin 6

试试这个:

$str = 'http://www.example.com/some_folder/some file [that] needs "to" be (encoded).zip';
$pos = strrpos($str, '/') + 1;
$result = substr($str, 0, $pos) . urlencode(substr($str, $pos));
Run Code Online (Sandbox Code Playgroud)

您正在寻找最后一次出现的斜线标志.它之前的部分是可以的,所以只需复制即可.和urlencode休息.


Jef*_*ett 6

首先,这就是为什么你应该使用rawurlencode而不是urlencode.

要回答您的问题,与其在大海捞针中寻找针头并冒着不在您的 URL 中编码其他可能的特殊字符的风险,不如对整个内容进行编码,然后修复斜线(和冒号)。

<?php
$myurl = 'http://www.example.com/some_folder/some file [that] needs "to" be (encoded).zip';
$myurl = rawurlencode($myurl);
$myurl = str_replace('%3A',':',str_replace('%2F','/',$myurl));
Run Code Online (Sandbox Code Playgroud)

结果如下:

http://www.example.com/some_folder/some%20file%20%5Bthat%5D%20needs%20%22to%22%20be%20%28encoded%29.zip