将 src 值以“webm”结尾的 <img> 标签替换为 <video> 标签

问题描述 投票:0回答:3

我需要将

<img>
标签更改为
<video>
标签。我 不知道如何继续代码,因为我可以更改所有包含 WebM 的标签。

function iframe($text) {
    $Dom = new DOMDocument;
    libxml_use_internal_errors(true);
    $Dom->loadHTML($text);
    $links = $Dom->getElementsByTagName('img');
    foreach ($links as $link) {
        $href = $link->getAttribute('src');
        if (!empty($href)) {
            $pathinfo = pathinfo($href);
            if (strtolower($pathinfo['extension']) === 'webm') {
                //If extension webm change tag to <video>
            }        
        }
    }
    $html = $Dom->saveHTML();
    return $html;
}
php html dom replace tags
3个回答
1
投票

像罗马一样,我正在使用http://php.net/manual/en/domnode.replacechild.php

但我正在使用 for 迭代并使用简单的 strpos() 在 src 中测试

.webm
扩展。

$contents = <<<STR
this is some HTML with an <img src="test1.png"/> in it.
this is some HTML with an <img src="test2.png"/> in it.
this is some HTML with an <img src="test.webm"/> in it,
but it should be a video tag - when iframe() is done.
STR;

function iframe($text)
{
    $dom = new DOMDocument;
    libxml_use_internal_errors(true);
    $dom->loadHTML($text);

    $images = $dom->getElementsByTagName("img");

    for ($i = $images->length - 1; $i >= 0; $i --) {
        $nodePre = $images->item($i);
        $src     = $nodePre->getAttribute('src');
        // search in src for ".webm"
        if(strpos($src, '.webm') !== false ) {

            $nodeVideo = $dom->createElement('video');
            $nodeVideo->setAttribute("src", $src);
            $nodeVideo->setAttribute("controls", '');

            $nodePre->parentNode->replaceChild($nodeVideo, $nodePre);
        }
    }

    $html = $dom->saveHTML();
    return $html;
};

echo iframe($contents);

部分输出:

this is some HTML with an <video src="test.webm"></video> in it,
but it should be a video tag - when iframe() is done.

0
投票

使用此代码:

(...)
if( strtolower( $pathinfo['extension'] ) === 'webm') 
{
    //If extension webm change tag to <video>
    $new = $Dom->createElement( 'video', $link->nodeValue );
    foreach( $link->attributes as $attribute )
    {
        $new->setAttribute( $attribute->name, $attribute->value );
    }
    $link->parentNode->replaceChild( $new, $link );
}
(...)

通过上面的代码,我创建了一个带有

video
标签和
nodeValue
作为
img
节点值的新节点,然后将所有
img
属性添加到新节点,最后用新节点替换旧节点。

请注意,如果旧节点有

id
,代码将产生警告。


0
投票

具有

DOMDocument::createElement
DOMNode::replaceChild
功能的解决方案:

function iframe($text) {
    $Dom = new DOMDocument;
    libxml_use_internal_errors(true);
    $Dom->loadHTML($text);
    $links = $Dom->getElementsByTagName('img');
    foreach ($links as $link) {
        $href = $link->getAttribute('src');
        if (!empty($href)) {
            $pathinfo = pathinfo($href);
            if (strtolower($pathinfo['extension']) === 'webm') {
                //If extension webm change tag to <video>
                $video = $Dom->createElement('video');
                $video->setAttribute("src", $href);
                $video->setAttribute("controls", '');
                $link->parentNode->replaceChild($video, $link);
            }        
        }
    }
    $html = $Dom->saveHTML();
    return $html;
}

http://php.net/manual/en/domdocument.createelement.php

http://php.net/manual/en/domnode.replacechild.php

© www.soinside.com 2019 - 2024. All rights reserved.