1

ウェブサイトのコンテンツを読み込もうとしていますが、画像を取得したいのですが、これらの要素をリンクしたいのですが、要素のコンテンツではなく、要素自体を取得したいのです。たとえば、要素全体を取得したいのです。

これどうやってするの..

<?php

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, "http://www.link.com");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    $output = curl_exec($ch);

    $dom = new DOMDocument;
    @$dom->loadHTML($output);

    $items = $dom->getElementsByTagName('a');

    for($i = 0; $i < $items->length; $i++) {
        echo $items->item($i)->nodeValue . "<br />";
    }

    curl_close($ch);;
?>
4

2 に答える 2

4

DOMElementのシリアル化された htmlを求めているように見えますか? <a href="http://example.org">link text</a>たとえば、 ?を含む文字列が必要です。(質問をより明確にしてください。)

$url = 'http://example.com';
$dom = new DOMDocument();
$dom->loadHTMLFile($url);

$anchors = $dom->getElementsByTagName('a');

foreach ($anchors as $a) {
    // Best solution, but only works with PHP >= 5.3.6
    $htmlstring = $dom->saveHTML($a);

    // Otherwise you need to serialize to XML and then fix the self-closing elements
    $htmlstring = saveHTMLFragment($a);
    echo $htmlstring, "\n";
}


function saveHTMLFragment(DOMElement $e) {
    $selfclosingelements = array('></area>', '></base>', '></basefont>',
        '></br>', '></col>', '></frame>', '></hr>', '></img>', '></input>',
        '></isindex>', '></link>', '></meta>', '></param>', '></source>',
    );
    // This is not 100% reliable because it may output namespace declarations.
    // But otherwise it is extra-paranoid to work down to at least PHP 5.1
    $html = $e->ownerDocument->saveXML($e, LIBXML_NOEMPTYTAG);
    // in case any empty elements are expanded, collapse them again:
    $html = str_ireplace($selfclosingelements, '>', $html);
    return $html;
}

ただし、エンコーディングが混在する可能性があるため、これは危険であることに注意してください。出力を別の DOMDocument として保持し、importNode()必要なノードをコピーするために使用することをお勧めします。または、XSL スタイルシートを使用します。

于 2012-05-10T03:11:58.993 に答える
0

サンプルコードをコピーして貼り付けただけで、実際にどのように機能するかを学ぼうとはしなかったと思います...

とにかく、->nodeValueパーツは要素を受け取り、テキスト コンテンツを返します (要素には単一のテキスト ノードの子があるため、他に何かがあれば、何が得られるかわかりませんnodeValue)。

したがって、を削除するだけで->nodeValue、要素が作成されます。

于 2012-05-10T00:40:37.667 に答える