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