0

我想在另一个 (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

4 回答 4

0

你有两种方法可以做到:

  1. 如果远程站点有 CORS 标头(Access-Control-Allow-Origin: *),您可以使用 AJAX 请求注入它;请注意,这将在不支持 CORS 的浏览器上失败
  2. 你可以在服务器上解析它

到目前为止,选项 2 是您首选的方法,它依赖于两个库(如果您像我一样,三个库):curl,它将处理 HTTP 请求,以及DOMDocument,它处理解析。

不久前我为某人写了一个解析器。你可以在那里找到它:https ://stackoverflow.com/a/16144603/2167834 。它有很多关于如何使用DOMDocument.

请注意,这DOMDocument特别容易在以下情况下发生故障:

  1. 不正确的字符集定义
  2. 损坏的 HTML
  3. 内联 JavaScript

但是,您可以重写源代码来处理这个问题。

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

请注意,如果 DOM 文档有多个具有相同 ID 的元素,**这将失败。根据 HTML 规范,他们不应该有。

于 2013-05-17T20:36:58.300 回答
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

实际上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 回答
-1

你想在 jquery 中使用类似 .load 的函数

于 2013-05-17T20:05:34.947 回答