PHP / regex: скрипт для создания имен файлов с тире вместо пространств

Я хочу изменить PHP-скрипт, который я использую в wordPress (плагин Auto Featured Image).
Проблема заключается в том, что этот скрипт создает имена файлов для эскизов на основе URL-адресов изображения.

Это звучит здорово, пока вы не получите имя файла с пробелами, а миниатюра – это что-то вроде this%20Thumbnail.jpg и когда браузер перейдет на http://img.ruphp.com/spaces/this Thumbnail.jpg он преобразует %20 в пространство и на этом имени нет имени файла на этом сервере (с пробелами).

Чтобы исправить это, я думаю, мне нужно изменить следующую строку таким образом, чтобы $ imageURL был отфильтрован, чтобы преобразовать %20 в пробелы. Звучит правильно?
Вот код. Возможно, вы можете сказать мне, если я лаю неправильное дерево.
Спасибо!

 <?php static function create_post_attachment_from_url($imageUrl = null) { if(is_null($imageUrl)) return null; // get file name $filename = substr($imageUrl, (strrpos($imageUrl, '/'))+1); if (!(($uploads = wp_upload_dir(current_time('mysql')) ) && false === $uploads['error'])) { return null; } // Generate unique file name $filename = wp_unique_filename( $uploads['path'], $filename ); ?> 

Отредактировано более подходящим и полным ответом:

 static function create_post_attachment_from_url($imageUrl = null) { if(is_null($imageUrl)) return null; // get the original filename from the URL $filename = substr($imageUrl, (strrpos($imageUrl, '/'))+1); // this bit is not relevant to the question, but we'll leave it in if (!(($uploads = wp_upload_dir(current_time('mysql')) ) && false === $uploads['error'])) { return null; } // Sanitize the filename we extracted from the URL // Replace any %-escaped character with a dash $filename = preg_replace('/%[a-fA-F0-9]{2}/', '-', $filename); // Let WordPress further modify the filename if it may clash with // an existing one in the same directory $filename = wp_unique_filename( $uploads['path'], $filename ); // ... } 

Вам лучше заменить пробелы в имени изображения символами подчеркивания или hypens, используя regexp.

 $string = "Google%20%20%20Search%20Amit%20Singhal" preg_replace('/%20+/g', ' ', $string); 

Это регулярное выражение заменит несколько пробелов (% 20) на одно пространство ('').