Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Automatyczna zamiana http:// na linki
Forum PHP.pl > Forum > PHP
bmati666
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?

nospor
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.
bmati666
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
Pyton_000
masz tu 1 patter dla URL...

Kod
%^((https?://)|(www\.))([a-z0-9-].?)+(:[0-9]+)?(/.*)?$%i
bmati666
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.
viking
Bo nawiasy służą do łapania wyrażeń. Zrób sobie var_dump($text);
Pyton_000
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...
bmati666
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ć?
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.