Здравствуйте!
Никак не могу составить рабочее регулярное выражение.
Мне необходимо заменить все href у внешних ссылок на site.ru/out.php?url=&id=
Пока мой мозг дошел только до этого:
preg_match_all('~<a.*?href="([^"]+)".*?>(.*?)</a>~s', $content, $links);
foreach ($links[1] as $l) {
$content = str_replace($l, '/out.php?url='. base64_encode($l) .'&id='. $post->ID, $content);
}
return $content;
Но он не подходит под все мои условия.
Что нужно:если ссылка НЕ на мой домен (site.ru, img.site.ru, forum.site.ru)
добавить rel="nofollow"
если в домене ссылки есть домен из массива $badlinks
*Проверяем есть ли в ссылке #! (это ссылки на mega.nz и mega.co.nz)
Если есть, то закодировать href в base64 и заменить на site.ru/out.php?url=<ссылка>&fuckMega=1&id=<ID поста>
Если нет, то заменить href ссылок на site.ru/out.php?url=<ссылка>&id=<ID поста>
Зачем мне это?
1. nofollow для внешних ссылок
2. В out.php идет редирект на url, но перед этим в базу заносится клик для поста
* С ссылками на mega есть проблемы - у них в url есть #! - в результате в out.php параметр url передается не полный, а обрезается все что начинается с #!.... т.е. доходит только домен mega.co/ вместо mega.co/#!asdad232141f а т.к. на странице out.php идет редирект на url - единственный выход, который я нашел, это закодировать ссылку на mega и добавить параметр fuckMega = 1 что бы в out.php ее раскодировать