4

他の属性を失うことなく、HTML IMG タグの src= 属性を交換できると便利なことがよくあります。これを行うための迅速で非正規表現の方法は何ですか?

RegEx を使用したくない理由は次のとおりです。

  1. とても読みにくいです。新しいケースを説明する必要があるたびに、パターンの解読に 20 分も費やしたくありません。
  2. この関数を変更して、幅と高さの属性が欠落している場合にそれらを追加することを計画しています。この目的のために単純な RegEx 文字列置換を変更するのは簡単ではありません。

コンテキストは次のとおりです。それぞれ 1 つの画像を含む RSS フィードの投稿がたくさんあります。これらの画像を空白の画像に置き換えたいと思いますが、HTML は影響を受けないようにします。

$raw_post_html = "<h2>Feed Example</h2>
    <p class='feedBody'>
        <img src='http://premium.mofusecdn.com/6ff7098b3c8561d70c0af16d30e57d4e/cache/other/48da8425bc54af2d5d022f28cc8b021c.200.0.0.png' alt='Feed Post Image' width='350' height='200' />
        Feed Body Content
    </p>";

echo replace_img_src($raw_post_html, "http://cdn.company.org/blank.gif");
4

1 に答える 1

13

これが私が思いついたものです。PHP DOM API を使用して小さな HTML ドキュメントを作成し、IMG 要素だけの XML を保存します。

function replace_img_src($original_img_tag, $new_src_url) {
    $doc = new DOMDocument();
    $doc->loadHTML($original_img_tag);

    $tags = $doc->getElementsByTagName('img');
    if(count($tags) > 0)
    {
           $tag = $tags->item(0);
           $tag->setAttribute('src', $new_src_url);
           return $doc->saveHTML($tag);
    }

    return false;
}

: 5.3.6 より前のバージョンの PHP では、$doc->saveHTML($tag)を に変更できます$doc->saveXML($tag)

于 2013-06-20T17:53:29.453 に答える