2012-06-15 6 views
0

Я пытаюсь найти способ найти все изображения на странице и изменить их источник по мере необходимости. Вот то, что я до сих пор:синтаксис preg_replace (img src)

add_filter('the_content','wpdu_image_replace'); 
function wpdu_image_replace($content) { 
    $upload_dir = wp_upload_dir(); 
    $pattern = '/<img.*src="(.*?)".*?>/'; 
    $replacement = wpdu_base64_encode_image($upload_dir['path'].'/'.\1); 
    return preg_replace($pattern, $replacement , $content); 
} 

У меня три проблемы, хотя:

  1. Я, начиная от с «Src» метку, используя относительный путь на сервере - но нет проверьте, если:
    1. изображение действительно существует на сервере
    2. Если изображение действительно является URL данный родственник или не
  2. Неверная переменная $replacement (я не уверен, как вывести то, что только в теге src)
  3. Я бы не стал объявлять тег <img> на замену, потому что тогда я потерял бы все другое, что окружало его (например, классы, идентификаторы и т. д.).

Кто-нибудь знает, как захватить только источник изображений и заменить его в моде, который я описываю? Я смотрел на Simple HTML DOM в качестве альтернативы, но получал ужасные результаты. Любая помощь будет принята с благодарностью. Благодаря!

ответ

0

1) Убедитесь, что изображение действительно существует на сервере

preg_match_all("!(?<=src\=\").+(?=\"(\s|\/\>))!",$html, $match, PREG_SET_ORDER); 

$files = $match; 
foreach ($files as $file) { 
    if (file_exists($file)) { 
     echo "The file $file exists"; 
     //if image exists you can replace it like: 
     $html = str_replace($file, 'NewImagePath', $html);//$file is the found image source 
    } else { 
     echo "The file $file does not exist"; 
    } 
} 

Другой способ заменить изображения:

$html = '<img id="brandLogo" src="chrome://branding/content/about-logo.png" alt=""/>' 
    $html = preg_replace('!(?<=src\=\").+(?=\"(\s|\/\>))!', 'newlogo.png',$html); 

этот код находит Source chrome://branding/content/about-logo.png и заменить его новым newlogo.png

2) Чтобы проверить, является ли путь относительным или абсолютным, вы можете использовать функцию php parse_url

+0

Как это сделать, когда несколько '' существует в html и хочет заменить его другим источником.? – Dhara

+0

в preg_replace параметр replace может быть массивом – Alex