Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Automatyczna zamiana http:// na linki
bmati666
post
Post #1





Grupa: Zarejestrowani
Postów: 57
Pomógł: 1
Dołączył: 12.02.2016

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


Witam,
Znalazłem taki skrypt:
  1. <?php
  2. function createUrl($text){
  3. $text=preg_replace('|(?<!href=")(https?://[A-Za-z0-9+\-=._/*(),@\'$:;&!?]+)|',
  4. '<a href="http://$1">$1</a>',
  5. $text);
  6. return $text;
  7. }
  8.  
  9. $text = 'http://funckej.net to bardzo dobra strona a <a href="http://www.onet.pl" target="_blank">http://www.onet.pl</a> też dobre jest';
  10.  
  11. echo createUrl($text);
  12. ?>

Problem w tym, że link po kliknięciu nie przekierowuje do http://... tylko http// (bez dwukropka).
Wie ktoś jak to naprawić i co zrobić żeby samo www.strona.pl (bez http://) też zamieniało w link?

Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie: '<a href="http://$1">$1</a>',
a: '<a href="$1">$1</a>',

A na przyszlosc patrz jak wyglada wygenerowane zrodlo a nie tylko przetworzony html. Blad bylo widac od razu.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
bmati666
post
Post #3





Grupa: Zarejestrowani
Postów: 57
Pomógł: 1
Dołączył: 12.02.2016

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


Dzięki, a jak zrobić żeby samo www bez http też zmieniało w link?

Wykombinowałem coś takiego:
  1. function createUrl($text){
  2.  
  3. $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
  4.  
  5. $reg_exUrl2 = "/(www)\.[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
  6.  
  7. if(preg_match($reg_exUrl, $text, $url)) {
  8. $text=preg_replace($reg_exUrl, '<a href="'.$url[0].'" rel="nofollow">'.$url[0].'</a>', $text);
  9. }
  10. else
  11. {
  12. if(preg_match($reg_exUrl2, $text, $url2)) {
  13. $text=preg_replace($reg_exUrl2, '<a href="http://'.$url2[0].'" rel="nofollow">'.$url2[0].'</a>', $text);
  14. }
  15. }
  16.  
  17. return $text;
  18. }

I wszystko działa, tylko jak w "$text" znajdą się 3 różne opcje np. www.google.pl http://google.pl http://www.google.pl to wtedy wyswietla
dwa razy http://google.pl z linkiem bez www i raz www.google.pl bez linku
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


masz tu 1 patter dla URL...

Kod
%^((https?://)|(www\.))([a-z0-9-].?)+(:[0-9]+)?(/.*)?$%i


Ten post edytował Pyton_000 15.03.2016, 16:10:18
Go to the top of the page
+Quote Post
bmati666
post
Post #5





Grupa: Zarejestrowani
Postów: 57
Pomógł: 1
Dołączył: 12.02.2016

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


Zrobiłem tak:
  1. function createUrl($text){
  2. $text=preg_replace('%^((https?://)|(www\.))([a-z0-9-].?)+(:[0-9]+)?(/.*)?$%i',
  3. '<a href="$1">$1</a>',
  4. $text);
  5. return $text;
  6. }

Teraz w ogóle nie działa, pokazuje się samo http:// albo www.

Ten post edytował bmati666 15.03.2016, 15:18:45
Go to the top of the page
+Quote Post
viking
post
Post #6





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Bo nawiasy służą do łapania wyrażeń. Zrób sobie var_dump($text);


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Ahh sorry, mój błąd. To wyrażenie nadaje się do weryfikacji czy cały ciąg jest URL czy nie... Także do kosza z nim...
Go to the top of the page
+Quote Post
bmati666
post
Post #8





Grupa: Zarejestrowani
Postów: 57
Pomógł: 1
Dołączył: 12.02.2016

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


Udało mi się wykombinować coś takiego:
  1. function createUrl($text){
  2.  
  3. $text = preg_replace('#https?://[a-z0-9._/-]+#i', '<a href="$0">$0</a>', $text);
  4.  
  5. $regex = "#[ ]+(www.([a-z0-9._-]+))#i";
  6.  
  7. $text = preg_replace($regex," <a href='http://$1'>$1</a>",$text);
  8.  
  9. return $text;
  10. }

Ale, jak widać przed www. musi być spacja.
Chciałbym to zamienić na warunek, że przed www. nie może być http://




Da się coś takiego zrobić?

Ten post edytował bmati666 16.03.2016, 18:40:58
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 Aktualny czas: 19.08.2025 - 07:31