public function encode_filename_in_path($file)
{
$url = parse_url($file);
if (!isset($url['path'])) {
// Can't determine path, return original
return $file;
}
$file_name = basename($url['path']);
if (false !== strpos($file_name, '%')) {
// File name already encoded, return original
return $file;
}
$encoded_file_name = rawurlencode($file_name);
if ($file_name === $encoded_file_name) {
// File name doesn't need encoding, return original
return $file;
}
return str_replace($file_name, $encoded_file_name, $file);
}