初投稿ですが、こういう方法はどうでしょうか。
説明は#に書いてあります。
function encode_file_url($url){
#parse_urlでscheme、host、pathに分解する。
$parts = parse_url($url);
#さらにpathの方をコールバック関数rawurldecodeで解析して細かく分解する。
$path_parts = array_map('rawurldecode', explode('/', $parts['path']));
#最後は全てのパーツを文字列に戻す。
return $parts['scheme'] . '://' . $parts['host'] . implode('/', array_map('rawurlencode', $path_parts));
}
echo encode_file_url("http://example.com/ex/am ple/some file name.html");
echo encode_file_url("http://example.com/ex/am%20ple/some%20file%20name.html");
echo encode_file_url("http://example.com/ex/am+ple/some+file+name.html");
以上の3つのパターンで試しました。
半角空白のraw urlが「%20」になりますので、
もしurlが動的ではない場合、直接%20を書き替えても大丈夫と思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。