PHP - 如何包含网站的一部分?

时间:2013-05-17 20:03:45

标签: php file-get-contents

我想在另一个(Y)中包含一个html文档(X)的一部分。

有:

<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);
?>

我得到了整个页面,我不知道如何......将它缩小到那个div ...

4 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

您有两种方法可以做到:

  1. 如果远程站点有CORS头(Access-Control-Allow-Origin:*),您可以使用AJAX请求注入它;请注意,这将在不支持CORS的浏览器上失败
  2. 您可以在服务器上解析它
  3. 选项2是您的首选方法,依赖于两个库(如果您像我一样,则为三个): curl ,它将处理HTTP请求, DOMDocument ,用于处理解析。

    我曾经为某人写过一个解析器。你可以在那里找到它:https://stackoverflow.com/a/16144603/2167834。它有很多关于如何使用DOMDocument来完成DOM的详细解释。

    请注意,DOMDocument特别容易破坏以下内容:

    1. 错误的字符集定义
    2. HTML HTML
    3. 内联JavaScript
    4. 但是,您可以重写您的来源以解决此问题。

      在您的情况下,一旦拥有DOMDocument和DOMXPath对象,就需要query("//[@id=\"cmform\"]")。两个正斜杠表示“任何父级”,[@id与参数id完全匹配。

      请注意,如果DOM文档具有多个具有相同ID的元素,则此操作将失败。他们不应该通过HTML规范。

答案 2 :(得分: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);

答案 3 :(得分:-1)

你想在jquery

中使用类似.load函数的东西