Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z weryfikacją (wyrażenia regularne)
Forum PHP.pl > Forum > Przedszkole
Fred1485
Mam dwa proste bbcode na url: pierwszy to:

  1. $text = preg_replace('#\[url\=(.*?)\](.*?)\[\/url\]#', '<a href=\1>\2</a>', $text);


drugi to:

  1. $text = preg_replace('#((http|https|ftp|ftps)[\w\#$%&~/.\-;:=,?@\(\)]*)#si', '<a href=\1>\1</a>', $text);


Oba kody działają wyśmienicie ALE osobno niestety bo jak pewna część osób już zauważyła gdy chcę aby działały te dwa skrypty to się wzajemnie wykluczają, tj

Jeśli wkleję jakiś link to skrypt nr dwa przekształca go na link ale, jeśli w [url ][ /url] dam jakiś link to oba wyrażenia regularne do niego niestety pasują i w efekcie wychodzi kicha :\ np daję link [url ]http://www.google.pl[ /url] to pierwszy skrypt przekształci go w <a href=http://www.google.pl>http://www.google.pl</a> ale po nim drugie wyrażenie regularne zamieni dalej ten kod na <a href=<a href=>http://www.google.pl</a>><a href=>http://www.google.pl</a></a>

I się wszystko miesza :\

Myślałem nad tym żeby sprawdzić czy został użyty [url] ale to i tak nic nie da na dobrą sprawę...
b4rt3kk
Proponuję do drugiego wyrażenia dodać spację (przed lub po linku) i to powinno załatwić sprawę. Chyba że chcesz na linki przekształcać również text typu:

Cytat
bla bla bla link do googlehttp://google.pl


Jeśli nie to wyrażenie może wyglądać tak:

  1. $text = preg_replace('#\s((http|https|ftp|ftps)[\w\#$%&~/.\-;:=,?@\(\)]*)\s#si', '<a href=\1>\1</a>', $text);
Fred1485
No teoretycznie to by sprawę rozwiązało ale tylko połowicznie, dajmy na to że chcę wysłać wiadomość tylko z linkiem więc do textarea wklejam http://www.google.pl/
ale linku z tego absolutnie nie zrobi bo żadnych spacji nie dajemy...Ten problem na bank da się jakoś rozwiązać ale trzeba jeszcze pomyśleć biggrin.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.