Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2019, 22: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, 18: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, 00:06   #3
Вадим Мошев

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

тег noindex — невалидный. Теговые скобки надо заключать в комментарии.
Вадим Мошев вне форума Ответить с цитированием
Старый 08.07.2019, 00: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 в 00:35.
web-coder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Внешние ссылки. mylana HTML и CSS 3 04.03.2015 19: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 13:05