Я хочу отфильтровать внешние ссылки из своего поста в блоге. Может ли кто-нибудь помочь мне с регулярными выражениями? - PullRequest
1 голос
/ 05 февраля 2010

У меня есть данные блога, такие как:

This is foreign <a href="xyz.com">link</a>, this is my site's <a href="mysite.com">link</a> and so on.

Я хочу отфильтровать ссылки на иностранных сайтах, т.е. "<a href="xyz.com">link</a>". Так что мой окончательный вывод:

This is foreign link, this is my site's <a href="mysite.com">link</a> and so on.

Я пробовал "preg_replace", но никакой шаблон не помог.

Ответы [ 4 ]

2 голосов
/ 05 февраля 2010

Прежде всего, я должен согласиться с людьми, которые уже говорили, что регулярные выражения не были подходящим инструментом для HTML.

Тем не менее, если то, что вы хотите сделать, не сложнее, чем замена любого и всех вхождений

<a href="something.tld">foo</a>

с

foo

если что-то не является вашим доменом, то это должно сработать

preg_replace( '/<a href="http:\/\/(?!mysite.com)(.*?)>(.*?)<\/a>/',
              '$2',
              $mystring );

где $ mystring - это строка, которую вы хотите изменить. Тем не менее, здесь используются регулярные выражения регулярных выражений, что является довольно хорошей раздачей того, что это не предназначалось для регулярных выражений.

НТН

1 голос
/ 05 февраля 2010

Вы можете использовать DOMDocument, чтобы найти все элементы ссылки и просто обновить источник таким образом. Я написал небольшой пример того, как использовать DOMDocument, чтобы найти все ссылки . Я использую этот метод для перезаписи ссылок в некоторых проектах, над которыми я работал. Я уверен, что не потребовалось бы много усилий, чтобы пойти дальше и удалить тег и заменить его текстом, если URL не соответствует вашему хосту.

1 голос
/ 05 февраля 2010

Этого нельзя делать с помощью регулярных выражений.

Попробуйте что-то вроде парсера DOM.

Я не знаю, используете ли вы PHP, но этот очень прост в использовании:
http://simplehtmldom.sourceforge.net/

Надеюсь, это поможет.

0 голосов
/ 06 февраля 2010

Я настоятельно рекомендую вам использовать http://htmlpurifier.org/, что не только облегчит написание фильтра ссылок (http://htmlpurifier.org/docs/enduser-uri-filter.html), но и защитит вас от атак XSS. Если вы не используете анализатор HTML из белого списка, вам нужно обрабатывать предоставленные пользователем данные как литералы и экранировать специальные символы html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...