Я хочу изменить 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) на одно пространство ('').