0

これは当たり前のように思えるかもしれませんが、問題は、事前に弦の長さがわからないということです。私のクライアントには、CMSを介してYouTubeビデオを投稿に追加する既製/購入済みのブログがあります。基本的に、関数で次のような文字列を検索する必要があります。

<embed width="425" height="344" type="application/x-shockwave-flash"     pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://www.youtube.com/somevid"></embed>

現在の幅と高さの値に関係なく、それらを独自の定数(width = "325" height = "244"など)に置き換えたいと思います。誰かがこれについて行くための最良の方法を親切に説明できますか?

よろしくお願いします!!

4

2 に答える 2

2

DOMDocumentFTW!

<?php

define("EMBED_WIDTH", 352);
define("EMBED_HEIGHT", 244);

$html = <<<HTML
<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

<embed width="425" height="344" type="application/x-shockwave-flash"
       pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://www.youtube.com/somevid"></embed>


</body>
</html>
HTML;

$document = new DOMDocument();
$document->loadHTML($html);

$embeds = $document->getElementsByTagName("embed");

$pattern = <<<REGEXP
|
(https?:\/\/)?   # May contain http:// or https://
(www\.)?         # May contain www.
youtube\.com     # Must contain youtube.com
|xis
REGEXP;

foreach ($embeds as $embed) {
    if (preg_match($pattern, $embed->getAttribute("src"))) {
        $embed->setAttribute("width", EMBED_WIDTH);
        $embed->setAttribute("height", EMBED_HEIGHT);
    }
}

echo $document->saveHTML();
于 2012-06-29T14:31:01.273 に答える
-2

正規表現を使用して置き換える必要があります。例えば:

    if(preg_match('#<embed .*type="application/x-shockwave-flash".+</embed>#Us', $originalString)) {
        $string = preg_replace('#width="\d+"#', MY_WIDTH_CONSTANT, $originalString);
    }

「。*」は任意の文字を意味します。シャープの後に「s」フラグを渡すように、改行も受け入れます。「U」フラグは貪欲でないことを意味します。見つかった最初の終了埋め込みタグで停止します。

「\d+」は、1桁以上を意味します。

于 2012-06-29T14:17:47.563 に答える