Как удалить пробел в имени изображения и сохранить новый файл

Я использую плагин wordpress, называемый « Добавить связанные изображения в галерею », чтобы сохранить локальную копию изображений, размещенных на моем сайте. Я загрузил все свои файлы на другом хостинге, и я тестировал этот плагин в localhost, чтобы узнать, выполняет ли он эту работу.

Что делает этот плагин :
Плагин ищет внешние изображения, размещенные на сайте, сохраняет локальную копию и заменяет старый адрес изображения в HTML-коде новым адресом изображения, который находится в локальном.

В чем проблема :
При тестировании плагина на локальном хосте я заметил, что этот плагин неправильно сохраняет изображения с «белыми пробелами» в именах файлов. Например :

Это Image.png

не будет отображаться в блоге, вместо этого это правильный способ показать это:

Это% 2520is% 2520an% 2520image.png

как вы можете видеть, белые пробелы заменяются на «% 2520», я не уверен, почему это происходит, но изображение не появляется в блоге.

Я попытался изменить этот плагин, чтобы он автоматически заменил пробел в файле изображения на «_», я смотрю на исходный код и нашел эту строку:

$content = preg_replace('/(<img[^>]* src=[\'"]?)('.$trans.')/', '$1'.$imgpath, $content); 

который, как я полагаю, отвечает за замену изображений, но когда я его модифицировал, он удалил содержимое и изображение.

Можно ли изменить этот плагин, чтобы сначала заменить пробел в имени файла, затем сохранить локальную копию, а затем использовать эту локальную копию в блоге?

благодаря

Используйте sanitize_file_name( $filename ) . Эта функция не просто захватывает пробел, но и удаляет другие специальные символы:

 $special_chars = array( "?", "[", "]", "/", "\\", "=", "<", ">", ":", ";", ",", "'", "\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", "!", "{", "}", chr(0) ); 

Найдите следующую строку в коде плагина:

 $id = media_handle_sideload($file_array, $post_id, $desc); 

Непосредственно над этой строкой добавьте:

 $file_array['tmp_name'] = sanitize_file_name( $file_array['tmp_name'] ); 

Предостережение: Я не проверял его.

Обязательно переименуйте плагин и имя файла плагина. В противном случае вы получите уведомления об обновлении. И обратитесь к автору , попросите его выполнить эти изменения.

Попробуйте заменить:

 rename($file_array['tmp_name'], $file_array['tmp_name'] . $ext); 

С:

 $newname = strtolower(str_replace(' ', '-', $file_array['tmp_name'])); rename($file_array['tmp_name'], $newname . $ext); 

Не испытано