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

问题是urlencode它还会对使 URL 不可用的斜杠进行编码。我怎样才能只编码最后一个文件名?

4

4 回答 4

10

尝试这个:

$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其余的。

于 2013-06-18T22:18:54.647 回答
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));

结果如下:

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

于 2016-06-16T19:54:43.610 回答
0

拉出文件名并将其转义。

$temp = explode('/', $myurl);
$filename = array_pop($temp);

$newFileName = urlencode($filename);

$myNewUrl = implode('/', array_push($newFileName));
于 2013-06-18T22:19:08.733 回答
0

类似于@Jeff Puckett 的答案,但作为一个函数,以数组作为替换:

function urlencode_url($url) {
    return str_replace(['%3A','%2F'], [':', '/'], rawurlencode($url));
}
于 2021-04-29T20:56:27.260 回答