0

如何将获取的 URL 加载$_SERVER['REQUEST_URI']到 domDocument 中?

我正在尝试将动态网页加载到 DOMDocument 中以解析某些单词。最终,我想为我的网站(Tiki Wiki CMS)创建一个词汇表。我开始非常简单,现在我只是尝试加载页面并解析文本以进行测试。我是 DOMDocument 的新手,在阅读了本网站和 PHP 手册上的几篇文章后,我知道我必须使用 加载一个 html 页面,然后通过或loadHTMLFile解析该网站才能使用它。它适用于静态页面,但我遇到的主要问题是我无法在 中输入静态 url ,因为应该在用户上传网站时执行解析。getElementsByIdgetElementsByTagNameloadHTMLFile

这是DID工作的代码:

$url = 'http://mysite.org/bbk/tiki-index.php?page=pagetext';
$dom = new DOMDocument;
$dom->loadHTMLFile($url);
$a = $dom->getElementsByTagName('a');

foreach ($a as $link) {
echo $link->nodeValue;
}

所以,我想我可以使用 $_SERVER['REQUEST_URI'] 来完成这项工作,但它没有用。

这不起作用(没有错误消息):

$url = $_SERVER['REQUEST_URI'];
$dom = new DOMDocument;
$dom->loadHTMLFile($url);
$a = $dom->getElementsByTagName('a');

foreach ($a as $link) {
echo $link->nodeValue;
}

在检查了 $url 输出是什么之后,我决定添加http://mysite.org它以使其与有效的 url 相同。但是,也没有运气,这次我遇到了内部服务器错误。

这也不起作用(内部服务器错误):

$url = 'http://mysite.org' . $_SERVER['REQUEST_URI'];
$dom = new DOMDocument;
$dom->loadHTMLFile($url);
$a = $dom->getElementsByTagName('a');

foreach ($a as $link) {
echo $link->nodeValue;
}

我想我在这里遗漏了一些实质性的东西,我认为可能无法以这种方式使用 DOMDocument,所以我再次在网上搜索帮助(如果可以将 $_SERVER['REQUEST_URI'] 与DOMdocument),但我没有找到答案。所以我希望这里的任何人都可以提供帮助。包括第三方解析器等在内的任何建议都会有所帮助,但需要使用正则表达式解析的任何内容除外。Tiki Wiki CMS 已经有一个用正则表达式完成的词汇表选项,但它非常有问题。

谢谢。

更新

我还没有找到问题的答案,但我想我知道我的错误在哪里。我期待$_SERVER['REQUEST_URI']在尚未完全构建的动态页面上运行。我在主设置页面上运行了脚本,所以当我试图指向它时,我猜想 html 尚未呈现$_SERVER['REQUEST_URI']。当我注意到这可能是问题时,我放弃了使用 DomDocument 解析文档的想法,并使用了可以在文档准备好后加载的 javascript 解决方案。

4

1 回答 1

1

我可以想到两件你可以做的事情(可能不会直接解决你的问题,但会极大地帮助你解决它):

  1. $_SERVER['REQUEST_URI']不包含您认为的内容。尝试echoing 或var_dumping 它,看看它是否符合您的期望。
  2. 启用错误报告。您看到通用 500 错误页面的原因是错误报告被禁用。使用error_reporting().

另请注意,DOMDocument仅解析 HTML,如果您使用客户端语言或 CSS 伪元素生成并添加到页面中的动态 DOM 节点,除非您也部署 JS/CSS 解析器(即不是微不足道的)。

于 2013-11-07T12:31:41.507 回答