我正在尝试使用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);
有没有人知道如何让浏览器准确输出变量是什么,而不像我的问题中发生的那样改变它?将来知道这将是有用的。
感谢所有回复。我并没有期待这么多或那么快。
答案 0 :(得分:0)
你的最后一个问题是:
有没有人知道如何让浏览器准确输出变量是什么,而不像我的问题中发生的那样改变它?将来知道这将是有用的。
如果我理解正确,您想了解阻止浏览器将www.example.com?p=1&e=2
等网址字符串呈现为www.example.com?php=1&e=2
的方法。
这样做的方法是使用echo htmlentities($url);
而不仅仅是echo $url;
。这样,字符串的&
部分将由浏览器完全呈现。
示例代码:
<?php
$url = "www.example.com?p=1&e=2";
echo $url;
echo "<br/>";
echo htmlentities($url);
?>
产生的浏览器输出:
www.example.com?p=1&e=2
www.example.com?p=1&e=2