Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyrażenia regularne
Forum PHP.pl > Forum > Przedszkole
b_chmura
Witam
zacząłem się bawić wyrażeniami regularnymi i chciałem napisać funkcje która po podaniu tekstu wszystkie adresy url (umieszczone pomiędzy ) zamienia na aktywne hiperłącza, wszytkie czyli mam na myśli

1 - http://google.pl
2 - http://www.google.pl
3 - www.google.pl

nie potrafię sobie poradzić jak odróżnić czy adres między ma już http://

próbowałem to rozwiązać w ten sposób:
  1. <?php
  2. if(preg_match("/(http://)/",$co))
  3. {
  4. $co = preg_replace("/()(www.|http://)([a-zA-Z0-9@#%&_=?/.-]+)()/","<a href='23'>23</a>",$co);
  5. }
  6. else
  7. {
  8. $co = preg_replace("/()(www.|http://)([a-zA-Z0-9@#%&_=?/.-]+)()/","<a href='http://23'>23</a>",$co);
  9. }
  10. ?>


ale niestety w niczym mi to nie pomaga...
jak mam osiągnąć taki rezultat?
gszesiek
podobne
b_chmura
może i podobne ale nie to samo...
ja próbuje z całego tekstu pozamieniać wszystkie adresy i problem sie pojawia gdy w tekście są mieszane ulr'e
jeśli w tekście jest jeden url lub wszytkie są takie same (albo z http:// albo bez) funkcja sobie daje rade.
Zrobiłem trochę po swojemu i chamsko ale działa:

kod:
  1. <?php
  2. function url($co) 
  3. {
  4. $co = str_replace("http://www.","www.",$co);
  5. $co = str_replace("http://","www.",$co);
  6. $co = preg_replace("/()(www.|http://)([a-zA-Z0-9@#%&_=?/.-]+)()/","<a href='http://23'>23</a>",$co);
  7.  
  8. return $co;
  9. }
  10. ?>
Kicok
Zapisz sobie to wyrażenie w ten sposób:
- Na początku znajdź
- Za nim może (ale nie musi: ?) występować http://
- Później może (ale nie musi: ?) występować www.
- Później będą jeszcze jakieś znaki aż do najbliższego


A składasz link tak: http:// + to co znaleziono pod 3 pauzą + to co znaleziono pod 4 pauzą
b_chmura
Cytat
- Za nim może (ale nie musi: ?) występować http://

ale jeśli wystąpi to link będzie wyglądał
Cytat
Kicok
Cytat("Kicok")
A składasz link tak: http:// + to co znaleziono pod 3 pauzą + to co znaleziono pod 4 pauzą


`2 pauzę` (czyli tą, którą wychwytujesz "http://") ignorujesz, a później na sztywno dodajesz "http://" podczas składania linku.


Można by do tego dodać sprawdzanie innych protokołów, np: https:// Wtedy musiałbyś sprawdzić, czy `2 pauza` coś wychwyciła. Jeśli tak, to to wstawiasz na początek linku. Jeśli `2 pauza` jest pusta, to dodajesz tam domyślne "http://".
b_chmura
po waszych wskazówkach wyszło mi to tak:
Kod
  $co = preg_replace('/\[url\](http:\/\/)?(www\.)?([a-zA-Z0-9@#%\&_=?\/\.-]+\.)([a-zA-Z0-9]{2,4})?\[\/url\]/','<a href="http://www.\\3\\4">www.\\3\\4</a>',$co);


na razie nie znalazłem żadnych problemów
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.