-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)してから、新しいクエリ引数を使用して URL を再構築する必要があります。次に例を示します。

$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 要素のみを取得しているように見えるため、最初の質問が実際に何を意味するのかわかりません。

2 番目の質問については、次のようなsetAttribute()方法を使用するだけです。DOMElement

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

表示した HTML の解析に問題はないはずです。

于 2013-06-19T22:57:34.460 に答える