【问题标题】:How can I load a url obtained from $_SERVER['REQUEST_URI'] into DOMDocument?如何将从 $_SERVER['REQUEST_URI'] 获得的 url 加载到 DOMDocument 中?
【发布时间】:2013-11-07 20:31:41
【问题描述】:

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

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

这是 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'] 在尚未完全构建的动态页面上运行。我在主设置页面上运行了脚本,所以当我试图将 $_SERVER['REQUEST_URI'] 指向它时,我猜想 html 尚未呈现。当我注意到这可能是问题时,我放弃了使用 DomDocument 解析文档的想法,并使用了可以在文档准备好后加载的 javascript 解决方案。

【问题讨论】:

  • 感谢您的链接,弗雷德。但是,它会产生与我的代码相同的问题并返回“内部服务器错误”。
  • 你期望$_SERVER['REQUEST_URI'] 是什么,当这个脚本运行时它实际上是什么?
  • @Alf Eaton:我更新了我的问题,我希望你的问题的答案在那里。谢谢。
  • 看起来你期待$_SERVER['REQUEST_URI'] 是“bbk/tiki-index.php?page=pagetext”,但你没有说它实际上是什么。正如 Madara 所说,尝试打印 $_SERVER['REQUEST_URI'] 看看是否符合您的预期。

标签: php url html-parsing domdocument


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回答。我认为您关于 DOMDocument 的注释正是我的问题所在。我试图引用的页面是动态 DOM 节点的构建(Tiki Wiki CMS)。 (顺便说一句:我也尝试了你的第一点,S_SERVER['REQUEST_URI'] 得到了正确的地址)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 2016-04-26
相关资源
最近更新 更多