PHP获取和设置HTML元素的属性

时间:2013-06-19 22:45:56

标签: php domdocument

我正在寻找通过php操纵html元素的解决方案。 我正在阅读http://www.php.net/manual/en/book.dom.php,但我没有走得太远。

我正在使用“iframe”元素(视频嵌入代码)并尝试在回显之前修改它。 我想在“src”属性中添加一些参数。

根据https://stackoverflow.com/a/2386291的答案,我能够遍历元素属性。

        $doc = new DOMDocument();

        // $frame_array holds <iframe> tag as a string

        $doc->loadHTML($frame_array['frame-1']); 

        $frame= $doc->getElementsByTagName('iframe')->item(0);

        if ($frame->hasAttributes()) {
          foreach ($frame->attributes as $attr) {
            $name = $attr->nodeName;
            $value = $attr->nodeValue;
            echo "Attribute '$name' :: '$value'<br />";
          }
        }

我的问题是:

  1. 如何在不迭代元素的所有属性的情况下获取属性值,并检查当前元素是否是我正在寻找的元素?
  2. 如何在元素上设置属性值?
  3. 我不喜欢使用正则表达式,因为我希望它能成为未来的证据。如果“iframe”标签格式正确,我应该对此有任何问题吗?
  4. iframe示例:

        <iframe src="http://player.vimeo.com/video/68567588?color=c9ff23" width="486"
         height="273" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen>
       </iframe>
    

2 个答案:

答案 0 :(得分:1)

// to get the 'src' attribute
$src = $frame->getAttribute('src');

// to set the 'src' attribute
$frame->setAttribute('src', 'newValue');

要更改URL,您应首先使用parse_url($src),然后使用新的查询参数重建它,例如:

$parts = parse_url($src);
extract($parts); // creates $host, $scheme, $path, $query...

// extract query string into an array;
// be careful if you have magic quotes enabled (this function may add slashes)
parse_str($query, $args);
$args['newArg'] = 'someValue';

// rebuild query string
$query = http_build_query($args);

$newSrc = sprintf('%s://%s%s?%s', $scheme, $host, $path, $query);

答案 1 :(得分:0)

我不明白为什么你需要遍历属性来确定这是否是你正在寻找的元素。你似乎只是抓住第一个iframe元素,所以我不清楚你第一个问题是什么。

对于第二个问题,您只需要使用setAttribute()这样的DOMElement方法:

$frame->setAttribute($attr_key, $attr_value);

解析您显示的HTML时不应该有问题。