http://www.example.com/some_folder/some file [that] needs "to" be (encoded).zip
urlencode($myurl);
问题是urlencode
它还会对使 URL 不可用的斜杠进行编码。我怎样才能只编码最后一个文件名?
尝试这个:
$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));
您正在寻找斜线符号的最后一次出现。之前的部分没问题,所以只需复制它。urlencode
其余的。
首先,这就是为什么你应该使用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));
结果如下:
拉出文件名并将其转义。
$temp = explode('/', $myurl);
$filename = array_pop($temp);
$newFileName = urlencode($filename);
$myNewUrl = implode('/', array_push($newFileName));
类似于@Jeff Puckett 的答案,但作为一个函数,以数组作为替换:
function urlencode_url($url) {
return str_replace(['%3A','%2F'], [':', '/'], rawurlencode($url));
}