我正在使用PhpQuery获取与特定类的所有链接,之后我想让每个链接的html源变得混乱。
但首先是我从我正在研究的网站上获取链接。我没有我正在使用的网站的任何管理员权限。
所以,为了在我的localhost环境中完成我的所有研究,我完成了从这样的事情改变所有链接:
<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答案和其他人删除所有换行符并且没有运气。并尝试连接,就好像网址以问号结束一样。
如果我将代码更改为:
$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
会产生以下结果:
抱歉使用所有这些图片,但我不知道更好的方法来重现完全相同的问题。也很抱歉总是隐藏网站域使图像变脏,但我必须。
答案 0 :(得分:0)
我假设你有一些打破你的网址的突破线, 尝试这样做:
$findStringsArr = array("\0","\n","\r","search?q=");
$replaceStringsWithArr = array("","","","http://www.domain.com/busca/search?q=");
$subject = pq($link)->attr('href');
$pageUrl = str_replace($findStringsArr,$replaceStringsWithArr,$subject);