Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 03.07.2019, 23:19   #1
Geser7
Новичок
Джуниор
 
Регистрация: 03.07.2019
Сообщений: 1
По умолчанию Отделить внешние ссылки от внутренних (регулярка)

Здравствуйте!
Прошу помощи советом или делом.
Задача довольно популярная, но не смог найти нигде готового решения.
Надо отделить внешние ссылки от внутренних и внешние обличить в noindex и добавить nofollow.
Особенности внутренних ссылок, они содержат свое доменное имя (moysite.ru), либо не содержат доменного имени вообще, их надо оставить без изменения.
Ниже рабочий код, который определяет только ссылки по доменному имени. А якоря и ссылки без домена оборачивает в noindex.
Реально ли написать универсальное регулярное выражение?
Или лучше использовать несколько?
Код:
$text = 'текст <a href="https://www.flashboot.ru/index.php">ссылка внешняя с заменой</a><br />
<a href="http://forum.htmlbook.ru">ссылка 2 внешняя с заменой</a> текст текст<br />
<a href="http://moysite.ru/bbb/aaa/ggg.html">моя ссылка без замены (остается неизменной)</a><br />
текст <a href="/razdel/index.php">внутренняя ссылка, не должна меняться, а меняется :( </a><br />
<a href="#p1">якорь, тоже оборачивается в тег :(</a> ё моё!!!';
 
$regex = '%(<a\shref="(?!https?://moysite\.ru))(.*?</a>)%i';
$replacement = '<noindex><a rel="nofollow" href="$2</noindex>';
$result = preg_replace($regex, $replacement, $text);
echo $result;
Geser7 вне форума Ответить с цитированием
Старый 04.07.2019, 19:49   #2
web-coder
Пользователь
 
Аватар для web-coder
 
Регистрация: 27.05.2019
Сообщений: 70
По умолчанию

Вот ваша регулярка
Код:
$regex = '%<a\s+href="(https?:)?//(?!moysite\.ru)(.*?</a>)%i';
$replacement = '<noindex><a rel="nofollow" href="$1//$2</noindex>';
Лучший сервис выбора хостинга по параметрам.
Более 600 тарифов. Есть промокоды!
web-coder вне форума Ответить с цитированием
Старый 08.07.2019, 01:06   #3
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,591
По умолчанию

тег noindex — невалидный. Теговые скобки надо заключать в комментарии.
Вадим Мошев вне форума Ответить с цитированием
Старый 08.07.2019, 01:26   #4
web-coder
Пользователь
 
Аватар для web-coder
 
Регистрация: 27.05.2019
Сообщений: 70
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
тег noindex — невалидный. Теговые скобки надо заключать в комментарии.
Ну тогда так
Код:
$replacement = '<!--noindex--><a rel="nofollow" href="$1//$2<!--/noindex-->';
Лучший сервис выбора хостинга по параметрам.
Более 600 тарифов. Есть промокоды!

Последний раз редактировалось web-coder; 08.07.2019 в 01:35.
web-coder вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Внешние ссылки. mylana HTML и CSS 3 04.03.2015 20:11
Как сделать внешние ссылки HostFrost Общие вопросы Delphi 7 16.03.2012 12:40
Внешние ссылки olgofur Microsoft Office Excel 2 01.03.2012 15:52
Внешние ссылки МастерГуру HTML и CSS 3 14.10.2011 04:22
Не обновлять внешние ссылки при вводе istoe Microsoft Office Excel 4 29.01.2010 14:05