0

サイトを最新の状態に保つために、div タグを使用できる別の Web サイトに自分のページをリンクしようとしています。

私はいくつかの調査の後にいくつかのコードを取得しましたが、ページに複数の div クラスがあり、それらすべてをエコーし​​たいのに、1 つの文字列だけをエコーアウトしています。これが可能かどうか疑問に思っていますか?

現在のコードは次のとおりです。

<?php
$url = 'http://www.domain.com';
$content = file_get_contents($url);
$activity = explode( '<div class="class">' , $content );
$activity_second = explode("</div>" , $activity );

echo $activity_second[0];
?>

$activity_second[0]どちらが最初の行を表示し、どちらが2行目を表示するかをエコーでき$activity_second[1]ます。

ただし、これを拡張して、同じページのすべての div クラスを配列に入れ、テーブルのさまざまな部分にエコーアウトできるようにすることを検討しています。

よろしくお願いいたします。

4

4 に答える 4

1

私がそれをまっすぐに理解しているかどうか見てみましょう。あなたは次のようなものを持っています:

<div id="another-class"><div class="class">some text 1</div></div>
<div class="class">some text 2</div>
<div class="class">some text 3</div>
<div class="class">some text 4</div>
<div class="class">some text 5</div>
<div class="class">some text 6</div>

そして、div 要素を含むテキストが必要です。これが正しい場合は、以下を置き換えます。

$activity = explode( '<div class="class">' , $content );
$activity_second = explode("</div>" , $activity );

これとともに:

preg_match_all('#<div class="class">(.+?)</div>#', $content, $matches);

この例では、関数呼び出しの後、$matches は次のようになります。

Array
(
    [0] => Array
        (
            [0] => <div class="class">some text 1</div>
            [1] => <div class="class">some text 2</div>
            [2] => <div class="class">some text 3</div>
            [3] => <div class="class">some text 4</div>
            [4] => <div class="class">some text 5</div>
            [5] => <div class="class">some text 6</div>
        )

    [1] => Array
        (
            [0] => some text 1
            [1] => some text 2
            [2] => some text 3
            [3] => some text 4
            [4] => some text 5
            [5] => some text 6
        )

)

必要なデータは $matches[1] にあります。

于 2016-03-16T16:01:50.217 に答える
0

そのクラス名を持つ div のすべてのコンテンツを取得することを意図している場合は、それらの div のタグの間でこれらの文字列をキャプチャする正規表現を使用できます。

preg_match_all('/<div class="class">([^<]+)<\/div>/', $content, $m);

print_r($m[1]);

$m[1]これらの div のすべての内部 HTML 文字列を含む配列になります。

于 2016-03-16T15:51:55.713 に答える
0

ルールは次のとおりです。HTML を操作するときは、パーサーを使用する必要があります。

次のような HTML ドキュメントがあるとします。

$html = '<html>
<head><title>Untitled</title></head>
<body>
    <div class="class">
        <b>My Content 1</b>
    </div>
    <div class="class">
        <b>My Content 2</b>
    </div>
    <div class="class">
        <b>My Content 3</b>
    </div>
</body>
</html>';

それをオブジェクトにロードし、ロードされた HTML に基づいてオブジェクトをDOMDocument初期化します。DOMXPath

$dom = new DOMDocument();
libxml_use_internal_errors(1);
$dom->formatOutput = True;
$dom->loadHTML( $html );
$xpath = new DOMXPath( $dom );

このコマンドを使用すると、すべてにアクセスできます<div class="class">

foreach( $xpath->query( '//div[@class="class"]' ) as $node )
{
    echo trim( $node->nodeValue ) . '<br>';
}

あなたの出力:

My Content 1
My Content 2
My Content 3

ノードを HTML としてエコーする場合は、次のように置き換えます。echo ...

と:

echo $dom->saveHTML( $node );

出力します:

<div class="class">
    <b>My Content 1</b>
</div>
<div class="class">
    <b>My Content 2</b>
</div>
<div class="class">
    <b>My Content 3</b>
</div>

最後に、ノードのinnerHTMLのみをエコーする場合は、次のように記述する必要があります。

foreach( $xpath->query( '//div[@class="class"]' ) as $node )
{
    foreach ($node->childNodes as $child) 
    { 
        echo $dom->saveHTML( $child );
    }
}

出力は次のようになります。

<b>My Content 1</b>
<b>My Content 2</b>
<b>My Content 3</b>

于 2016-03-16T16:01:21.297 に答える