简单的html dom加载不同于url的页面

时间:2012-07-18 00:55:03

标签: php simple-html-dom

我正在尝试使用php的简单html dom解析器提取网页,我遇到了一个奇怪的问题。我通过连接两个字符串来定义url变量。

$itemUrl="http://www.example.com/";
$pageUrl="default.asp?pg=DispSingleItem&ItemNumber=1234";
$itemUrl .=$pageUrl;
$html=file_get_html($itemUrl);

当我运行此脚本时,我最终会转到一个显示“找不到项目”的页面。但是,当我回显$ itemUrl,复制输出并将其粘贴到浏览器中时,我会直接转到我要查找的页面。另外,如果我只是将整个网址保存为一个字符串,那么请将我带到正确的网页。

$itemUrl="http://www.example.com/default.asp?pg=DispSingleItem&ItemNumber=1234";
$html=file_get_html($itemUrl);

我尝试在连接字符串上使用urlencode,但这没有帮助。我真的很难过。我想不出为什么连接的网址会将我带到另一个页面的原因,直接复制并粘贴到另一个变量的同一个网址会将我带到正确的页面。我在这里错过了什么?任何帮助都会很棒,谢谢。

编辑: 我发现了这个问题。 $ pageUrl的回显显示了这一点:

default.asp?pg=DispSingleItem&ItemNumber=1234

实际上变量正在保存一个如下所示的字符串:

default.asp?pg=DispSingleItem&ItemNumber=1234

我的浏览器自动翻译&放大器;只是&,看起来就像我需要的那样。每当我运行file_get_html时,字符串都没有被转换,所以脚本试图从一个有&的URL中获取它。放大器;不仅仅是&amp ;.我补充说:

$pageUrl=preg_replace("/amp;/", "", $pageUrl);

有没有人知道如何让浏览器准确输出变量是什么,而不像我的问题中发生的那样改变它?将来知道这将是有用的。

感谢所有回复。我并没有期待这么多或那么快。

1 个答案:

答案 0 :(得分:0)

你的最后一个问题是:

  

有没有人知道如何让浏览器准确输出变量是什么,而不像我的问题中发生的那样改变它?将来知道这将是有用的。

如果我理解正确,您想了解阻止浏览器将www.example.com?p=1&e=2等网址字符串呈现为www.example.com?php=1&e=2的方法。

这样做的方法是使用echo htmlentities($url);而不仅仅是echo $url;。这样,字符串的&amp部分将由浏览器完全呈现。

示例代码:

<?php
$url = "www.example.com?p=1&amp;e=2";
echo $url;
echo "<br/>";
echo htmlentities($url);
?>

产生的浏览器输出:

www.example.com?p=1&e=2
www.example.com?p=1&amp;e=2