【发布时间】:2015-02-05 06:56:18
【问题描述】:
我正在使用PhpQuery 获取具有特定类的所有链接,然后我想获取每个链接的 html 源代码。
但首先我要从我正在研究的网站获取链接。我没有我正在使用的站点的任何管理员权限。
所以,为了在我的本地主机环境中完成我的所有研究,我完成了更改所有链接的操作:
<a class="linkHtml" href="search?q=HUGE_QUERY_HERE">link</a>
到:
<a class="linkHtml" href="http://www.domain.com/search?q=HUGE_QUERY_HERE">link</a>
在这里使用这个 PHP 代码:
foreach (pq('.linkHtml') as $link) {
$id = pq($link)->parent()->prev()->text();
$search = 'search?q=';
$replace = 'http://www.domain.com/busca/search?q=';
$subject = pq($link)->attr('href');
$pageUrl =str_replace($search,$replace,$subject);
pq($link)->attr('href',$pageUrl);
/* more code here */
}
问题是第一个? 以某种方式破坏了字符串。我什至无法在文本中重现同样的错误,我必须上传它的图片。
考虑到上面的代码,如果我执行var_dump($pageUrl) 并尝试连接它将导致:
你可以看到它看起来在search? 之后有一个换行符,即使它显然没有。我已经尝试根据this 答案和其他人删除所有换行符,但没有运气。它会尝试连接,好像 url 以问号结尾。
如果我将代码更改为:
$pageUrl =str_replace("search?q=", "searchq=", $pageUrl);
var_dump($pageUrl);
将导致:
如您所见,它会尝试正确连接,但显然searchq= 是错误的。
我错过了什么?那个换行符是从哪里来的? 我说我不能在文本中复制它,因为如果我复制它,它看起来会很正常,因为那里什么都没有,并且网站会正常工作。
编辑: 也试过了,但没有运气。
$pageUrl = urlencode($pageUrl);
$pageUrl = str_replace("%2f","/",$pageUrl);
$pageUrl = str_replace("%3A",":",$pageUrl);
$content = file_get_contents($pageUrl);
将字符串更改为单引号后,每个字符串都会产生一个var_dump:
很抱歉使用所有这些图像,但我不知道有更好的方法来重现完全相同的问题。也很抱歉总是隐藏站点域使图像变脏,但我必须这样做。
【问题讨论】:
-
尝试使用带单引号的字符串 ' 而不是 "
-
我要做的第一件事是回显 3 个字符串:1 个原始字符串,2 个替换字符串,3 个替换字符串
-
我会试试的。自从我上次使用 php 以来已经很长时间了,所以我已经习惯了在其他语言中使用双引号。
-
可以使用这些双引号,我只是假设有问题,
-
我认为您有一些在 html 中不可见的断行字符,请参阅下面我的回答,我认为它会解决您的问题。