вопрос: PHP: $mess=preg_replace("!(https?|ftp)://(.*?)([\s<'\"]){1,}!ise", "'<a href=\"\\1://\\2\" target=\"_blank\">\\1://\\2</a>\\3'", $mess); я не до конца раскурил эти штуки... но все-таки... Мне надо бы сделать так, чтобы оно жрало ссылки вида www.site.ru site.ru www.ste.ru?parametr=zna4enie а то в таком виде кушает только вместе в протоколом и без параметров
Не блин... хрень какая-то... там все служебные символы закручены через кодировки и я хрен славливаюсь...
PHP: $regex="#^(http://|https://|ftp://)?[-a-z0-9_\.]+([-a-z0-9_]+\.(html|php|cgi|pl|phtml))?([-a-z0-9_:@&\?=+,\.!/~*'%$]+)?$#i"; Вот так вот, должно работать
А это тебе для чего? Если тебе этим в чате или в форуме фильтровать, то под него попадут все любители не ставить пробел после точки, как тут "Привет.Как дела" - <a href="//Привет.Как/"... Code: [color=#00AA00]$mess[color=#0000FF]=[/COLOR][color=#00FF00]preg_replace[/COLOR][color=#0000FF]([/COLOR][/COLOR][color=#FFFF00]'[color=#FF0000]![/COLOR][color=#00FF00]([/COLOR]https?:[color=#00FF00]|[/COLOR]ftp:[color=#00FF00]|)[/COLOR][color=#00FF00]([/COLOR]//[color=#00FF00]|)[/COLOR][color=#00FF00]([[/COLOR][color=#FFFFFF]\w[/COLOR][color=#00FF00]]+[/COLOR]\[color=#00FF00].[/COLOR][color=#FFFFFF]\w[/COLOR][color=#00FF00][[/COLOR][color=#FFFFFF]\w[/COLOR][color=#00FF00].][/COLOR][color=#00FF00]+)[/COLOR]/?[color=#00FF00]([[/COLOR]^[color=#FFFFFF]\<\>[/COLOR][color=#FFFFFF]\"\n[/COLOR][color=#FFFFFF]\r\\[/COLOR]\\?[color=#00FF00]]*[/COLOR][color=#00FF00]|)[/COLOR][color=#00FF00]([/COLOR][color=#FFFFFF]\?[/COLOR][color=#00FF00][[/COLOR]^[color=#FFFFFF]\<\>[/COLOR][color=#FFFFFF]\"\n[/COLOR][color=#FFFFFF]\r\\[/COLOR]\\[color=#00FF00]]*[/COLOR][color=#00FF00]|)[/COLOR][color=#FF0000]!i[/COLOR]'[/COLOR][color=#00AA00][color=#0000FF],[/COLOR] [/COLOR][color=#FFFF00]'<a href="\1//\3/\4\5" target="_blank">\1//\3/\4\5</a>'[/COLOR][color=#00AA00][color=#0000FF],[/COLOR] $mess[color=#0000FF])[/COLOR][color=#FF0000];[/COLOR][/COLOR]
Hidden спасибо. так работает... но теперь смайлики перестали отображаться))))))))))) PS мне под гостевуху....
адреса должны иметь вид Code: images/smiles/smile37.gif а твоя строка переворачивает все слеши и ваще не пойми чего творит)) Code: <img src="images/smiles/<a href="//smile9.gif/" target="_blank">//smile9.gif/</a>" border="0"> чорт. я загнался совсем! Убейте меня!!!! я забыл что слеши надо У СЕБЯ перевернуть!!!! бекап юзаю..абассака я дурачок все исправил. теперь ситуация описана актуально)
Ну так она не может отличить имя с расширением от домена первого и второго уровня, можно не принимать единичный слеш перед доменным именем, можно фильтровать возможные доменные имена первого уровня, а можно фильтровать возможные расширения файлов, а вообще, смайлы должны обрабатываться после него. Когда я обрабатываю ббкоды, я их превращаю в промежуточную форму, чтоб не попадали под следующие выражения, а потом, всех сразу, в html
Простите неразумного. Меня сегодня совсем мухи засидели))) вот это был ключевой момент. спасибо огромное!
Смотри, главное проверь, чтоб они внутрь url не попали, лучше сразу на них исключения поставить, приведи какие именно смыйлы используешь
а... ну это просто. Разновидности имеют такие символы... 1) 2) !) 3) :lol: вроде ниче опасного [hidden *] Есть такая галочка "Отключить смайлики в тексте" [dron-anarchy] Я запомню... [Great] А никто ее еще не поставил PS закрываем-с...
BB коды на регекспах не пишут - потенциальные места для XSS. Используйте конечный автомат, на phpclub'е видел отличную реализацию недавно.
Это смотря кто пишет. Я лично больше доверяю своей реализации, чем неизвестно чьей, и буду уверен, в том, что туда не попадёт то, что не должно попасть, особенно после часов 3 перепроверки.
Ты не прав, т.к. по любому еще остается человеческий фактор. Ошибку может допустить любой, хотя вероятность появления ошибки с повышением опыта уменьшается.
Полностью согласен, поэтому я и не хочу полагаться на то, что у того, кто пишет те фильтры, больше опыта.