首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找所有出现的PHP并逐个替换

查找所有出现的PHP并逐个替换
EN

Stack Overflow用户
提问于 2020-02-17 19:48:11
回答 1查看 286关注 0票数 1

我正在将字符串中的所有出现项替换为。我正在做的是:

1)我从youtube url获取video_id。

代码语言:javascript
复制
preg_match('/embed\/([\w+\-+]+)[\"\?]/', $string,$video_id);

2)我使用amp-youtube删除iframe并添加url video id。

代码语言:javascript
复制
$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...好的,我能做到

代码语言:javascript
复制
preg_match_all('/embed\/([\w+\-+]+)[\"\?]/', $string,$video_id);

来获取字符串中的所有视频in。

但是,如何循环将每个id添加到字符串中的每个amp-youtube data-videoid中呢?

谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-17 22:37:28

我希望你发布了一个最小的示例html字符串和你期望的输出,但我想我明白你的意思了。

不要使用regex来解析html。在现有的iframe标记存在的情况下迭代,并使用iframe的src值中准备好的子字符串将其替换为所需的标记。

代码:(Demo)

代码语言:javascript
复制
$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();

输出:

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60261779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档