-2

我正在寻找一种通过 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”标签格式正确,我应该对此有任何问题吗?

iframe 示例:

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

2 回答 2

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);
于 2013-06-19T22:51:44.530 回答
0

我不明白为什么您需要遍历属性以确定这是否是您要查找的元素。你似乎只抓住了第一个 iframe 元素,所以我不清楚你的第一个问题到底是关于什么的。

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

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

解析所显示的 HTML 应该没有问题。

于 2013-06-19T22:57:34.460 回答