2013-02-20 2 views
0

У меня есть база данных с видео youtube, хранящаяся как URL-адреса iframe. то, что я хочу сделать, это показать миниатюру youtube рядом с каждым видео, используя некоторые базовые команды замены. я хотел бы запустить функцию в php, которая автоматически найдет контент, вычеркнет теги iframe и оставит функцию только с идентификатором.фильтрация элементов в строке PHP

в третьем поле у ​​меня есть код так:

echo $galleryitems[$i][2] 

вернется

<iframe width="640" height="360" src="http://www.youtube.com/embed/scYj-bDEaKI?rel=0" frameborder="0" allowfullscreen></iframe> 

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

<iframe width="640" height="360" src="http://www.youtube.com/embed/ 

и

?rel=0" frameborder="0" allowfullscreen></iframe>` 

Я думаю, что str_replace хватит? то, что я хотел бы, в конце концов, является функцией $strLink = scYj-bDEaKI (только идентификатор видео)

просмотрел SO немного и попытался это:

$galleryitems[$i][2] = preg_replace('/<iframe[^>]*>(.*?)<\/iframe>/', '', $strLink, 1); 

echo $strLink; 

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

+0

ой ... вот почему люди ненавидят тех, кто хорошо «из ниоткуда» переменных РНР. вы неправильно используете preg_replace. '$ strLink = preg_replace ('/ ] *> (. *?) <\/iframe> /', '', $ galleryitems [$ i] [2], 1); 'должен работать лучше для вас – Najzero

ответ

0

Пожалуйста, не разобрать HTML с RegEx.

$dom = new DOMDocument(); 
$dom->loadHTML($html); 
$items = $dom->getElementsByTagName('iframe'); 
if ($items->length) { 
    $url = basename(parse_url($items->item(0)->getAttribute('src'), PHP_URL_PATH)); 
} 

Пример in codepad

+0

Спасибо Ranty, это довольно хорошо автономно - но когда я вставляю это в документ, он анализирует все отдельные идентификаторы на одну строку ... где каждый из них должен экспортироваться индивидуально. это связано с элементом DOM? – antonanton

+0

@ Энтони, я не уверен, что вы имеете в виду. Проблема в том, что все идентификаторы видео назначаются одной и той же переменной '$ url'? Вместо этого вы можете использовать массив, я обновил ответ для него. Если это не то, что вы имели в виду, уточните пожалуйста. – Ranty

+0

говорил слишком рано, была проблема с незакрытым тегом, кричит! благодаря! – antonanton

1

Для синтаксиса PHP регулярных выражений, вы можете обратиться

http://php.net/manual/en/reference.pcre.pattern.syntax.php

$s = '<iframe width="640" height="360" src="http://www.youtube.com/embed/scYj-bDEaKI?rel=0" frameborder="0" allowfullscreen></iframe>'; 
echo preg_replace('/<iframe.* src="http:\/\/www\.youtube\.com\/embed\/(.*?)\?.*<\/iframe>/', '$1', $s); 
Смежные вопросы