@thekot24
Говнокодер.

Почему регулярка порой убивает ссылки?

Есть две регулярки:
$html1 = preg_replace('#\b(aaa|aaas|acap|cap|cid|crid|data|dav|dict|dns|fax|file|ftp|go|gopher|h323|http|https|im|imap|ldap|mailto|mid|news|nfs|nntp|pop|pres|rtsp|sip|sips|snmp|tel|telnet|urn|wais|xmpp|about|aim|bolo|btc|bzr|callto|chrome|cvs|daap|ed2k|ed2kftp|feed|fish|git|gizmoproject|iax2|irc|ircs|lastfm|ldaps|magnet|mms|msnim|psyc|rsync|secondlife|skype|ssh|svn|sftp|smb|sms|soldat|steam|unreal|ut2004|view-source|vzochat|webcal|xfire|ymsgr)://[^\s\'"><]+#i', '<a href="$0">$0</a>', $rows_2['comment']);
                                       
                                               $html = preg_replace('/vk.com\/([^\s]+)/i', '<a href="https://vk.com/$1" target="_blank">vk.com/$1</a>', $html1);

Если имеется две ссылки:
vk.com/* и https:/vk.com/*, то вторая превращается в это:
<a href="https://&lt;a href=" https:="" vk.com="" settings?act="deactivate.&quot;">https://vk.com/settings?act=deactivate.</a>
(пример)
Как можно исправить? До меня не доходит.
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Samarkand
Наверно 2 раза прогоняешь, до (БД, экранирование) и после.
В любом случае твои выражения работать не будут, т. к. вместо [^\s\'"><]+ надо перечислить все разрешенные символы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы