PHP / regex: скрипт для создания имен файлов с тире вместо пробелов - PullRequest
0 голосов
/ 24 марта 2012

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

Это звучит замечательно, пока вы не получите имя файла с пробелами, а миниатюра будет выглядеть как this%20Thumbnail.jpg, а когда браузер перейдет на http://www.whatever.com/this%20Thumbnail.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 );
?>

Ответы [ 2 ]

1 голос
/ 24 марта 2012

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

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 );

    // ...
}
0 голосов
/ 24 марта 2012

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

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

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

...