我正在将字符串中的所有出现项替换为。我正在做的是:
1)我从youtube url获取video_id。
preg_match('/embed\/([\w+\-+]+)[\"\?]/', $string,$video_id);2)我使用amp-youtube删除iframe并添加url video id。
$string = preg_replace( '/<iframe\s+.*?\s+src=(".*?").*?<\/iframe>/',
'<amp-youtube data-videoid="'.$video_id[1].'" width="480" height="270" layout="responsive"></amp-youtube>', (str_replace("https://www.youtube.com/embed/","", $string)));这只适用于一次情况。
但如果我有多个iframe...好的,我能做到
preg_match_all('/embed\/([\w+\-+]+)[\"\?]/', $string,$video_id);来获取字符串中的所有视频in。
但是,如何循环将每个id添加到字符串中的每个amp-youtube data-videoid中呢?
谢谢!!
发布于 2020-02-17 22:37:28
我希望你发布了一个最小的示例html字符串和你期望的输出,但我想我明白你的意思了。
不要使用regex来解析html。在现有的iframe标记存在的情况下迭代,并使用iframe的src值中准备好的子字符串将其替换为所需的标记。
代码:(Demo)
$html = <<<HTML
<div>
<p>
<iframe allowfullscreen="" class="media-element file-default" data-fid="2219" data-media-element="1" frameborder="0" height="360" src="https://www.youtube.com/embed/sNEJOm4hSaw" width="640"></iframe>
</p>
<p>
<iframe allowfullscreen="" class="media-element file-default" data-fid="2219" data-media-element="1" frameborder="0" height="360" src="https://www.youtube.com/embed/abcdefghijk" width="640"></iframe>
</p>
</div>
HTML;
$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
while ($iframe = $dom->getElementsByTagName('iframe')->item(0)) {
$amp = $dom->createElement('amp-youtube');
$amp->setAttribute('width', '480');
$amp->setAttribute('height', '270');
$amp->setAttribute('layout', 'responsive');
$amp->setAttribute('data-videoid', str_replace("https://www.youtube.com/embed/","", $iframe->getAttribute('src')));
$iframe->parentNode->replaceChild($amp, $iframe);
}
echo $dom->saveHTML();输出:
<div>
<p>
<amp-youtube width="480" height="270" layout="responsive" data-videoid="sNEJOm4hSaw"></amp-youtube>
</p>
<p>
<amp-youtube width="480" height="270" layout="responsive" data-videoid="abcdefghijk"></amp-youtube>
</p>
</div>https://stackoverflow.com/questions/60261779
复制相似问题