【问题标题】:Simple html_dom_parser not working in Internet explorer简单的 html dom 解析器在 Internet Explorer 中不起作用
【发布时间】:2013-10-30 14:54:55
【问题描述】:

我正在尝试解析一个 html 网页。它在 Chrome 中正常工作,但在 Internet Explorer 10 中失败;

这是我的代码:

//the content variable is a string with the html markup
$html = str_get_html($content);
$element = $html->find('div[style="width: 460px; padding-bottom: 20px; font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #666666;"]', 0);
$tmp = $element->plaintext;
print($tmp);die();

在谷歌浏览器中,我得到了我想要的结果,只是我使用 find() 方法解析的元素内的纯文本。在 Internet Explorer 中,我得到一个空结果。似乎没有找到特定的元素。

如果,例如我这样做:

foreach ($html->find('img') as $img) {
    $pre[] = $img->src;
}
print_r($pre);die();

我在 chrome 和 Internet Explorer 中都得到了我想要的结果。 (返回字符串中所有图片的src属性)

有什么想法吗? 谢谢

【问题讨论】:

  • 搞砸了”并不是对问题的一个很好的描述。这里的实际问题是什么?您期望的输出是什么?它在 IE 中有何不同?实际生成的页面有什么不同吗? (使用“查看源代码”检查)。 IE 用什么渲染模式显示它? (使用 F12 开发工具检查)。
  • @Spudley 我正在使用源代码进行检查。我正在使用 $html->find() 方法解析的元素内的纯文本;我没有错误。似乎没有找到特定的元素。
  • 那么你在 IE 中得到了什么?你得到错误的价值吗?部分价值?什么都没有? $content 文件来自哪里?它是从浏览器发送的 HTML 文档吗?
  • 在即我得到一个空的结果。 $content 是一串 html 标记。我尝试将内容放入文件并解析该文件,仍然是同样的事情:Chrome 中的结果很好,Ie 中什么都没有...
  • $content 是通过 Ajax base_64 编码的。我解码字符串并解析它。我在 Chrome 上工作,机器人在 IE 中失败。

标签: php simple-html-dom domparser


【解决方案1】:

问题在于 Internet Explorer 将颜色的十六进制值(例如:#666666)替换为它的 rgb 值(rgb(102, 102, 102))。所以我不得不为 IE 做一个特例。

【讨论】:

  • 很明显,PHP 与浏览器无关。这就是为什么很多人称它为“服务器端”。
  • 是的,PHP 与浏览器无关,但它会在 DOM 中搜索您要查找的任何内容。而且 IE 不像 chrome 或 firefox 那样显示十六进制值(#666666),而是显示 RGB 值。而且它不会返回匹配项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-14
  • 1970-01-01
  • 2012-01-17
相关资源
最近更新 更多