0

ある HTML ドキュメント (X) のセクションを別のドキュメント (Y) に含めたいと考えています。

あります:

<div id="cmform">
....
....
</div>

HTML ドキュメント X にあり、それを HTML ドキュメント Y の div に含める必要があります。PHP ドキュメントを読み始めたところ、「file_get_contents」関数に関する情報が見つかりました。私が行った場合:

<?php
   $a = file_get_contents("http://site.com/document.html");
   echo ($a);
?>

ページ全体を取得しましたが、その 1 つの div に絞り込む方法がわかりません...

4

4 に答える 4

0

PHP で DOMDocument クラスを使用できます。

ドキュメント:
http://php.net/manual/en/class.domdocument.php

例:

$documentText = file_get_contents("http://site.com/document.html");
$domDocument = new DOMDocument();
$domDocument->loadHTML( $documentText );
$myDivNode = $domDocument->getElementById( 'the-id-of-the-div' );
$myDivText = $domDocument->saveHTML( $myDivNode );
echo $myDivText;
于 2013-05-17T20:31:42.367 に答える
0

それには 2 つの方法があります。

  1. リモート サイトに CORS ヘッダー (Access-Control-Allow-Origin: *) がある場合は、AJAX 要求を使用して挿入できます。これは、CORS をサポートしていないブラウザーでは失敗することに注意してください。
  2. サーバー上で解析できます

オプション 2 は断然お勧めの方法であり、HTTP リクエストを処理するcurlと解析を処理するDOMDocumentの2 つのライブラリ (私のような場合は 3 つ) に依存しています。

私はしばらく前に誰かのためにパーサーを書きました。https://stackoverflow.com/a/16144603/2167834で見つけることができます。を使用してDOMを通過する方法について、多くの詳細な説明がありますDOMDocument

DOMDocument特に次の場合は壊れやすいので注意してください。

  1. 文字セットの定義が正しくない
  2. 壊れた HTML
  3. インライン JavaScript

ただし、これに対処するためにソースを書き直すことができます。

あなたの場合、DOMDocument と DOMXPath オブジェクトを取得したら、次のことを行いますquery("//[@id=\"cmform\"]")。2 つのスラッシュは「任意の親」を意味し、[@id はパラメーター id と完全に一致します。

**これは、DOM ドキュメントに同じ ID を持つ複数の要素がある場合に失敗することに注意してください。HTML仕様では、そうすべきではありません。

于 2013-05-17T20:36:58.300 に答える
0

実際にfile_get_contents()は、ファイルの内容を表す文字列を返します。最も簡単な方法は、文字列を解析して div の値を取得することです。次の例を確認してください。

$html = 'hola <div id="cmform">'.
            "the content of div".
            "</div>adios";

echo preg_replace('/(.+)<div id="cmform">(.+)<\/div>(.+)/m', '\2', $html);
于 2013-05-17T20:43:08.660 に答える