phpquery — PHP: file_get_contents и cURL выдают 404 из-за «таинственного» Разрыв строки

я использую 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?Тяжело этого явно не имеет. Я уже пытался удалить все разрывы строк на основе этот ответы и другие и не повезло. И он пытается соединиться так, как если бы 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 каждого из них результат на этом:

введите описание изображения здесь

Извиняюсь за использование всех этих изображений, но я не знаю лучшего способа воспроизвести точно такую ​​же проблему. Также извините за постоянное сокрытие домена сайта, делая изображения грязными, но я должен.

0

Решение

Я полагаю, у вас есть несколько символов, которые нарушают ваш URL,
попробуйте сделать это:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]