Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   регулярные выражения. вопрос (https://forum.antichat.xyz/showthread.php?t=39244)

DRON-ANARCHY 30.04.2007 18:29

регулярные выражения. вопрос
 
вопрос:
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

а то в таком виде кушает только вместе в протоколом и без параметров

GreenBear 30.04.2007 18:37

http://regexlib.com/Search.aspx?k=link
посмотри )

DRON-ANARCHY 30.04.2007 18:46

Спасиба. Я весь гугл обшарил, а эту штуку не находил)

DRON-ANARCHY 30.04.2007 19:01

Не блин... хрень какая-то... там все служебные символы закручены через кодировки и я хрен славливаюсь...

mamamot 30.04.2007 19:58

PHP код:

$regex="#^(http://|https://|ftp://)?[-a-z0-9_\.]+([-a-z0-9_]+\.(html|php|cgi|pl|phtml))?([-a-z0-9_:@&\?=+,\.!/~*'%$]+)?$#i"

Вот так вот, должно работать:)

hidden 30.04.2007 20:37

А это тебе для чего? Если тебе этим в чате или в форуме фильтровать, то под него попадут все любители не ставить пробел после точки, как тут "Привет.Как дела" - <a href="//Привет.Как/"...
Код:

$mess=preg_replace('!(https?:|ftp:|)(//|)([\w]+\.\w[\w.]+)/?([^\<\>\"\n\r\\\\?]*|)(\?[^\<\>\"\n\r\\\\]*|)!i', '<a href="\1//\3/\4\5" target="_blank">\1//\3/\4\5</a>', $mess);

DRON-ANARCHY 30.04.2007 21:18

Hidden спасибо. так работает... но теперь смайлики перестали отображаться)))))))))))

PS мне под гостевуху....

hidden 30.04.2007 21:22

Цитата:

Сообщение от DRON-ANARCHY
Hidden спасибо. так работает... но теперь смайлики перестали отображаться)))))))))))

PS мне под гостевуху....

Приведи пример, каие именно, может щя исключения для них сделаю :)

DRON-ANARCHY 30.04.2007 21:29

адреса должны иметь вид
Код:

images/smiles/smile37.gif
а твоя строка переворачивает все слеши и ваще не пойми чего творит))
Код:

<img src="images/smiles/<a href="//smile9.gif/" target="_blank">//smile9.gif/</a>" border="0">
чорт. я загнался совсем! Убейте меня!!!! я забыл что слеши надо У СЕБЯ перевернуть!!!! бекап юзаю..абассака я дурачок


все исправил. теперь ситуация описана актуально)

hidden 30.04.2007 21:36

Ну так она не может отличить имя с расширением от домена первого и второго уровня, можно не принимать единичный слеш перед доменным именем, можно фильтровать возможные доменные имена первого уровня, а можно фильтровать возможные расширения файлов, а вообще, смайлы должны обрабатываться после него. Когда я обрабатываю ббкоды, я их превращаю в промежуточную форму, чтоб не попадали под следующие выражения, а потом, всех сразу, в html

DRON-ANARCHY 30.04.2007 21:42

Простите неразумного. Меня сегодня совсем мухи засидели)))
Цитата:

смайлы должны обрабатываться после
вот это был ключевой момент. спасибо огромное!

hidden 30.04.2007 21:44

Цитата:

Сообщение от DRON-ANARCHY
Простите неразумного. Меня сегодня совсем мухи засидели)))
вот это был ключевой момент. спасибо огромное!

Смотри, главное проверь, чтоб они внутрь url не попали, лучше сразу на них исключения поставить, приведи какие именно смыйлы используешь

DRON-ANARCHY 30.04.2007 21:48

Э.... не совсем понял...
что именно нужно привести? Полные имена?

hidden 30.04.2007 21:49

Цитата:

Сообщение от DRON-ANARCHY
Э.... не совсем понял...
что именно нужно привести? Полные имена?

Нет, какие именно смайлы?
Пример: :) ;) :D :p ...

DRON-ANARCHY 30.04.2007 21:56

а... ну это просто. Разновидности имеют такие символы...
1) :)
2) !)
3) :lol:
вроде ниче опасного

[hidden *] Есть такая галочка "Отключить смайлики в тексте" ;)
[dron-anarchy] Я запомню... ;)
[Great] А никто ее еще не поставил :)

PS закрываем-с...

hidden 30.04.2007 22:41

Вложений: 1
Ну вот, вроде всё предусмотрел :)
В аттаче, т.к. форум фильтрует

nerezus 30.04.2007 23:11

BB коды на регекспах не пишут - потенциальные места для XSS. Используйте конечный автомат, на phpclub'е видел отличную реализацию недавно.

hidden 01.05.2007 00:35

Цитата:

Сообщение от nerezus
BB коды на регекспах не пишут - потенциальные места для XSS.

Это смотря кто пишет.
Цитата:

Сообщение от nerezus
Используйте конечный автомат, на phpclub'е видел отличную реализацию недавно.

Я лично больше доверяю своей реализации, чем неизвестно чьей, и буду уверен, в том, что туда не попадёт то, что не должно попасть, особенно после часов 3 перепроверки.

nerezus 01.05.2007 10:09

Цитата:

Это смотря кто пишет.
Ты не прав, т.к. по любому еще остается человеческий фактор.

Ошибку может допустить любой, хотя вероятность появления ошибки с повышением опыта уменьшается.

hidden 01.05.2007 10:17

Цитата:

Сообщение от nerezus
хотя вероятность появления ошибки с повышением опыта уменьшается.

Полностью согласен, поэтому я и не хочу полагаться на то, что у того, кто пишет те фильтры, больше опыта.
Цитата:

Сообщение от nerezus
Ошибку может допустить любой

;)

nerezus 01.05.2007 11:42

Ну тогда же почему бы и не пойти путем, где может встретиться меньше ошибок?

Я вобщем-то не говорил взять скрипт того чувака, а советовал писать не через регекспы, а через StateMachine(как тот чел и делал) - вероятность ошибок будет сведена к минимуму.


Время: 20:00