Замена регулярного выражения Span - PullRequest
0 голосов
/ 06 июня 2011

У меня есть текст в моей базе данных. Например:

Dummy Text Here...
<span class="youtube">nmkW544sK9U</span>

Dummy Text Here...
<span class="youtube">yUBKZvq5G2g</span>

... и мне нужно заменить его на:

Dummy Text Here...
<iframe width="640" height="395" frameborder="0" allowfullscreen="" src="http://www.youtube.com/embed/nmkW544sK9U?rel=0"></iframe>

Dummy Text Here...
<iframe width="640" height="395" frameborder="0" allowfullscreen="" src="http://www.youtube.com/embed/yUBKZvq5G2g?rel=0"></iframe> 

Но я недостаточно хорошо знаю регулярные выражения и прошу вас помочь мне.

Ответы [ 2 ]

1 голос
/ 06 июня 2011

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

Самый лучший способ сделать это - использовать настоящий DOM-парсер. PHP DOMDocument идеален.

Например:

$dom = new DOMDocument;
$dom->loadHTML($yourHTML);

$xpath = new DOMXPath($dom);

$nodes = $xpath->query('//span[@class="youtube"]');

while ($node = $nodes->item(0)) {
    $iframe = $dom->createElement('iframe');
    $iframe->setAttribute('width', 640);
    $iframe->setAttribute('height', 395);
    $iframe->setAttribute('frameborder', 0);
    $iframe->setAttribute('allowfullscreen', '');
    $iframe->setAttribute('src', 'http://www.youtube.com/embed/' . $node->nodeValue . '?rel=0');

    $node->parentNode->replaceChild($iframe, $node);
}

$yourHTML = $dom->saveHTML();
0 голосов
/ 06 июня 2011

Что-то в этом духе должно работать.

$replacement = '<iframe width="640" height="395" frameborder="0" allowfullscreen="" src="http://www.youtube.com/embed/$1?rel=0"></iframe>';
preg_replace('/<span class="youtube">(\w+)<\/span>/', $replacement, $string);
...