2

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

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

当我运行这个脚本时,我最终会进入一个显示“未找到项目”的页面。但是,当我回显 $itemUrl、复制输出并将其粘贴到浏览器中时,我会直接转到我要查找的页面。此外,如果我只是将保存为一个字符串的整个 url 以它开头,则会将我带到正确的网页。

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

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

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

default.asp?pg=DispSingleItem&ItemNumber=1234

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

default.asp?pg=DispSingleItem&ItemNumber=1234

我的浏览器会自动翻译 & amp; 简单地 &,这看起来正是我所需要的。但是,每当我运行 file_get_html 时,该字符串都没有被转换,因此脚本试图从具有 & amp; 的 url 中获取它。不只是 &。我补充说:

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

有谁知道让浏览器准确输出变量的方法,而不像我的问题中发生的那样改变它?将来知道会很有用。

感谢所有的回复。我没想到这么多或这么快。

4

1 回答 1

0

你的最后一个问题是:

有谁知道让浏览器准确输出变量的方法,而不像我的问题中发生的那样改变它?将来知道会很有用。

如果我理解正确,您想知道一种防止浏览器呈现像www.example.com?p=1&e=2as之类的 url 字符串的方法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
于 2012-07-18T03:32:03.317 回答