Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Wyrażenia regularne, aktywowanie url
b_chmura
post 4.07.2007, 00:11:37
Post #1





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
gszesiek
post 4.07.2007, 01:36:03
Post #2





Grupa: Zarejestrowani
Postów: 152
Pomógł: 1
Dołączył: 17.09.2006

Ostrzeżenie: (0%)
-----


podobne


--------------------
Go to the top of the page
+Quote Post
b_chmura
post 4.07.2007, 10:04:59
Post #3





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
Kicok
post 4.07.2007, 16:26:47
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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ą


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
b_chmura
post 4.07.2007, 16:54:16
Post #5





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

Ostrzeżenie: (0%)
-----


Cytat
- Za nim może (ale nie musi: ?) występować http://

ale jeśli wystąpi to link będzie wyglądał
Cytat
Go to the top of the page
+Quote Post
Kicok
post 4.07.2007, 20:26:57
Post #6





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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://".


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
b_chmura
post 4.07.2007, 23:19:51
Post #7





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 11:42