@00user_user00

Как с помощью php изменить href у ссылки зная ее класс?

Гуру програмирования, подскажите как заменить тут с помощью php href ссылку, все никак не получается, всю ночь ломаю голову
<a class="like" href="site1=site2" onclick="ga('send', 'event', 'outbound', 'click', 'google.ru/music_save/');metrika_goal('music_save');">схранить трек</a>
  • Вопрос задан
  • 107 просмотров
Пригласить эксперта
Ответы на вопрос 4
@zkrvndm
Боты, парсеры, расширения
Используйте библиотеку phpQuery. Пример изменения атрибута:
require_once 'phpQuery/phpQuery/phpQuery.php';
$html = file_get_contents('https://ссылка_на_страницу');
$doc = phpQuery::newDocument($html);
$link = $doc->find('селектор_для_поиска_ссылки');
pq($link)->attr('href', 'https://новый_адрес_для_ссылки');
echo pq($doc)->html();

Писал по памяти, мог накосячить, поэтому код надо тестить, но вся суть библиотеки в том, что там точно такие же методы как в jQuery.
Ответ написан
@generate
...
Я не очень хорошо знаю регулярки, но примерно так
Но тут href должен стоять после класса
<?php

$str = "<a class=\"like\" href=\"site1=site2\" onclick=\"ga('send', 'event', 'outbound', 'click', 'google.ru/music_save/');metrika_goal('music_save');\">сохранить трек</a>";

echo ChangeHref($str, 'like' ,'https://www.google.com/');

function ChangeHref($str, $class, $link){
return preg_replace('#(<a[^>]*class="[^"]*'.$class.'[^"]*"[^>]*href=")([^>])*("[^>]*>)#', "$1". $link. "$3", $str);
}
?>
Ответ написан
@oxidmod
Ответ зависит от того, кто рендерит данную верстку. Если вы сами и рендерите - просто вставьте нужную ссылку. Если вы скачиваете верстку с другого сайта и хотите ее подхачить, то вам помогут регулярка\phpQuery\js на ваш выбор
Ответ написан
Вот как ваша задача будет выглядеть, если использовать библиотеку Simple HTML DOM Parser. В переменной $custom_value передаете новое значение для ссылки. Измененный текст у вас по прежнему в переменной $html

$html = file_get_html($file_path);

// получаем ссылку
$link = $html->find( 'a.like', 0 );
$link->href = $custom_value;

$html->clear();
unset($html);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы