0

我在一个调用 php 脚本的网站上使用 ajax,该脚本然后解析另一个页面并返回我想要显示的页面部分。我过去使用过这种技术并且效果很好,只是这次返回的页面部分中有一些 php 代码,并且它是在没有处理 php 代码的情况下返回的。

这是进行解析并返回结果的 php 脚本。

require_once('simple_html_dom.php');
$dom = new simple_html_dom;

if(isset($_GET['url']))  {
    $url = $_GET['url'];
    $html = file_get_html($url);
    /*get contents*/
    $contents = $html->getElementById('content');
    echo $contents;
}

正如我提到的,在 $contents 中返回的内容是在没有处理 $contents 字符串中的 php 代码的情况下返回的,我怎样才能让它在返回 $contents 字符串之前处理 php 代码?

预先感谢您的帮助。

4

1 回答 1

1

解析由另一个 PHP 脚本生成的 HTML 是相当骇人听闻的。如果您正在开发一个新站点,您至少应该将您的 PHP 脚本划分为函数,然后,对于 AJAX 请求,只调用必要的函数。

即使您正在处理现有的复杂站点,请记住 jQuery 的.load()允许您将服务器响应的特定片段插入到文档中,而丢弃其余部分:

$('#content').load('script.php #content');

也就是说,您要问的是可能的:

  • PHP 的输出控制函数允许您将脚本的输出捕获为字符串,您可以使用 str_get_html() 对其进行解析。要完成这项工作,您必须包含现有的 PHP 脚本。请注意,您包含的任何脚本都可以访问全局函数和变量、超全局变量和类。

    警告:确保根据特定文件的白名单检查请求的文件名,以防止文件包含攻击。仅仅将 URL 列入黑名单并禁用 allow_url_fopen 不足以保护您的网站。

    ob_start();
    require $filename; // might have to be outside of a function
    $html = str_get_html(ob_get_clean());
    
  • 或者,您可以让 AJAX 脚本使用file_get_contents()cURL(指定绝对 URL,而不是文件名)发出自己的 HTTP 请求。除非您以其他方式配置 Web 服务器,否则此内部请求将在您的 Web 服务器的访问日志中显示为来自 127.0.0.1 或您的 Web 服务器的 IP 地址。

于 2012-12-30T07:22:50.287 回答