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

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

Здравствуйте!
Прошу помощи советом или делом.
Задача довольно популярная, но не смог найти нигде готового решения.
Надо отделить внешние ссылки от внутренних и внешние обличить в 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
Сообщений: 46
Репутация: 76
По умолчанию

Вот ваша регулярка
Код:
$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
Адрес: programmersforum
Сообщений: 8,273
Репутация: 4038
По умолчанию

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Внешние ссылки. 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


19:39.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru