【问题标题】:PHP: file_get_contents and cURL gives a 404 because of a "myterious" line breakPHP:file_get_contents 和 cURL 由于“神秘”换行符而给出 404
【发布时间】: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 中不可见的断行字符,请参阅下面我的回答,我认为它会解决您的问题。

标签: php phpquery


【解决方案1】:

我假设你有一些破坏你的网址的断行字符, 尝试这样做:

$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);

【讨论】:

  • 从你分享的图片中可以看出有一些在html中看不到的断行字符
  • 是的,但它不起作用,现在才尝试。说真的,它快把我逼疯了。
  • 在执行 urlencode 之前执行此操作,同时在 echo '
    '.var_dump($pageUrl,true).'
    ';
    中回显结果字符串
  • 它正常打印字符串,没有奇怪的换行符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 2013-01-08
相关资源
最近更新 更多