Как заменить переменную строку URL (внутри ‹img src=›) в зависимости от шаблона? (Простой пирог)

Это мой первый пост здесь. Я не уверен, что название моего сообщения является наиболее описательным способом показать мою проблему, извините заранее!

Во всяком случае, у меня есть RSS-канал Facebook на моем сайте, использующий simplepie — я показываю посты с кратким изложением его содержания и сопровождающим изображением, оба взяты из самого канала.

У меня есть один div, который отображает эту информацию и повторяется в соответствии с количеством историй, которые я установил для отображения, в моем случае 3, поэтому HTML-страница выводит три div, каждый с другой историей/сопровождающим изображением.

<div class="block">
<a href="<?php echo $image_url ?>" target="_blank">
<img src="<?php echo $image ?>" alt="" />
</a>
</div>

Проблема в том, что RSS-каналы Facebook показывают только крошечные эскизы, созданные из исходного изображения (либо внешнего, либо с сервера Facebook), но я хочу, чтобы они были в исходном разрешении.

Я успешно заменил миниатюры, поступающие с сервера Facebook, изменив имя изображения (с «something_s.jpg» на «something_n.jpg»):

$image = str_replace("_s.jpg", "_n.jpg", $image);

Я попытался с помощью ltrim удалить URL-адрес Facebook, добавленный перед URL-адресом внешнего изображения (например, https://fbexternal-a.akamaihd.net/safe_image.php?d=AQDZORAaPpbr5COr&w=154&h=154&url=http://example.com/image.jpg). Итак, я думал, что это сделает это:

$image = ltrim(stristr(str_replace("_s.jpg", "_n.jpg", $image), '&url='), '&url=');

Как ни странно, внешние изображения появлялись в исходном разрешении (например, example.com/image.jpg внутри <img src="">), а изображения из Facebook (например, 10153970_10153145169383306_1966565627_n.jpg) больше не отображались. Атрибут img src просто пуст!

Что я здесь делаю неправильно? Любая помощь приветствуется.

(Кстати, это простой код на моей странице):

<?php
require_once('../php/autoloader.php'); 
$feed = new SimplePie();

$feed->set_feed_url(array('https://www.facebook.com/feeds/page.php?format=rss20&id=40796308305'));

$feed->set_item_limit(3);
$feed->init();

function returnImage ($text) {
$text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
$pattern = "/<img[^>]+\>/i";
preg_match($pattern, $text, $matches);
$text = $matches[0];
return $text;
}

function scrapeImage($text) {
$pattern = '/src=[\'"]?([^\'" >]+)[\'" >]/';
preg_match($pattern, $text, $link);
$link = $link[1];
$link = urldecode($link);
return $link;
}

$feed->strip_htmltags(array('embed','center','strong'));

$feed->handle_content_type();

foreach ($feed->get_items() as $item):
$feedDescription = $item->get_content();
$image = returnImage($feedDescription);
$image = scrapeImage($image);
$image = ltrim(stristr(str_replace("_s.jpg", "_n.jpg", $image), '&url='), '&url=');
$image_url= $item->get_permalink();
$description = $item->get_description();
$description = preg_replace('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', '', $description);
endforeach;

?>

person Mr. Rod    schedule 05.04.2014    source источник
comment
В конце поста добавлено немного дополнительной информации о моем коде SimplePie.   -  person Mr. Rod    schedule 05.04.2014


Ответы (1)


Мистер Род

используйте эту пользовательскую функцию, чтобы изменить атрибут Image src.

<?php
  function ChangeImageSrc($image , $Newsrc){
   $regex = '#src="(([^"/]*/?[^".]*\.[^"]*)"([^>]*)>)#';

    $Content = preg_replace($regex, $image, 'src="'.$Newsrc.'"');   
    return $Content;
   }
    // Useage
   $markup = "<img src='fb.com/blahblah.jpg'>";
   // Change Src
  $toNewSrc = ChangeImageSrc($markup , 'http://example.com/newsrc.png');
  print $toNewSrc;
?>

после добавления этой функции в ваш скрипт

изменить эту строку

$image = ltrim(stristr(str_replace("_s.jpg", "_n.jpg", $image), '&url='), '&url=');

to

$image = ChangeImageSrc('src="_n.jpg"', '_s.jpg');

вам нужно больше настроить эту функцию в соответствии с вашими потребностями.

person Azeem Hassni    schedule 05.04.2014
comment
Я собираюсь попробовать это и комментарий позже! - person Mr. Rod; 05.04.2014
comment
Надеюсь, что это поможет вам :) - person Azeem Hassni; 05.04.2014
comment
Это не сработало. Теперь у меня даже картинки не отображаются. Атрибут src просто возвращает значение _s.jpg. - person Mr. Rod; 05.04.2014
comment
Вы скопировали функцию как есть? - person Azeem Hassni; 05.04.2014
comment
Да, это та же функция без переделок. - person Mr. Rod; 05.04.2014
comment
то он должен вернуть эту строку src='newsource.jpg' . - person Azeem Hassni; 05.04.2014
comment
Неважно. В итоге я использовал регулярные выражения для замены добавленного URL. Вообще-то, первый раз ими воспользовалась! - person Mr. Rod; 07.04.2014
comment
я думаю, что вы не печатаете возвращаемое значение.. используйте эхо или печать - person Azeem Hassni; 07.04.2014