devblog, portfolio

movie producer, zend framework, php, jquery pluginy



PHP: Odnajdywanie adresów URL

Dzisiaj, jako że mam mniej czasu, napiszę o prostym skrypcie, który z pewnością przyda się każdemu, kto pisze własnego CMS'a, czy choćby skrypt do komentowania swojej strony czy bloga. O czy mowa? O skrypcie, który automatycznie znajdzie w ciągu adresy URL i zamieni je na linki. Do wykonania tego skryptu użyjemy wyrażeń regularnych, tych, które są dostępne zarówno w PHP, jak i w Perl'u.

Dzisiaj, jako że mam mniej czasu, napiszę o prostym skrypcie, który z pewnością przyda się każdemu, kto pisze własnego CMS'a, czy choćby skrypt do komentowania swojej strony czy bloga. O czy mowa? O skrypcie, który automatycznie znajdzie w ciągu adresy URL i zamieni je na linki. Do wykonania tego skryptu użyjemy wyrażeń regularnych, tych, które są dostępne zarówno w PHP, jak i w Perl'u.

Zacznę, tradycyjnie już, od pokazania kodu, a dopiero później zostanie on przeze mnie omówiony.

<?php
$c[0]='Kacper Kołodziej - http://kacperkolodziej.com';
$c[1]=preg_replace('#http://([-/a-zA-Z0-9.?&]+)#','<a href="http://\1">http://\1</a>',$c[0]);
echo $c[0] . '<br />' . $c[1];
?>

Powyższy fragment zamieni wszystkie linki w ciągu na takie, które "działają".

Jak widać do odnalezienia wszystkich URL'i użyłem wyrażenia regularnego i funkcji preg_replace. Treść wyrażenia to:

#http://([-a-zA-Z0-9.]+)#

Sposobu działania wyrażeń regularnych nie będę teraz tłumaczył, ale mogę skierować do dość dobrego ich opisu na stronie webmade.org.

Jednak podany przeze mnie kod można, a nawet powinno się, ulepszyć. Uwzględnia on tylko protokół HTTP. A co z protokołami HTTPS i FTP? Zaraz wprowadzimy do skryptu kilka zmian tak, aby uwzględniał on także inne protokoły.

<?php
$d[0]='Kacper Kołodziej - http://kacperkolodziej.com/kategoria/webmastering/ ftp://kacperkolodziej.com/ https://kacperkolodziej.com/';
$d[1]=preg_replace('#(http|https|ftp)://([-/a-zA-Z0-9_.?&]+)#','<a href="\1://\2">\1://\2</a>',$d[0]);
echo $d[0] . '<br />' . $d[1];
?>

Teraz skrypt uwzględni protokoły oddzielone operatorami logicznymi OR (znak: |).

Oczywiście, jeśli mamy takie życzenie, możemy dodać także inne protokoły. Np. irc.

Zachęcam do zapoznania się z zasadami działania wyrażeń regularnych i własnych eksperymentów.

DEMO

lisek www Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3 GTB6

w demo przydałby się formularzyk, żeby każdy mógł szybko sprawdzić czy to naprawdę działa, czy to jednak ściema w czystym htmlu ;)
A tak ogólnie to dzięki za gotowy kod :D wyrażenia regularne strasznie opornie mi idą...

Kacper Kołodziej www Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.1.8) Gecko/20100214 Ubuntu/9.10 (karmic) Firefox/3.5.8

Mi też szły opornie. Dopóki się nie nauczyłem. Polecam webmade.org oraz książki w Helionie. Te do Perl'a opisują wyrażenia regularne bardzo dogłębnie.

Dodaj komentarz »