Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]preg_replace a linki w tekście
sadistic_son
post 22.02.2021, 17:47:17
Post #1





Grupa: Zarejestrowani
Postów: 1 467
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Cześć,
Wyrażenia regularne nie są moją najmocniejszą stroną. Chcę aby podmieniało mi linki na klikalne linki. Innymi słowy aby wszystko pomiędzy stringami 'www.' , 'http://' oraz 'https://' aż do pierwszej napotkanej spacji albo znaku nowej linii, albo kropki po której jest spacja czy nowa linia było wrzucane w a href.
Zaadoptowałem taki oto kod.

  1. $url = '@(http(s)?)?(://)?(([a-zA-Z])([-\w]+\.)+([^\s\.]+[^\s]*)+[^,.\s])@';
  2. $string = preg_replace($url, '<a href="http$2://$4" target="_blank" title="$0">$0</a>', $string);
  3. $row[3]=$string;*/

Wszystko pięknie oprócz tego że konwertuje każdy tekst przed kropką. Czyli strona.pl zostanie przekonwertowana. Fajnie, ale strona.strona też sad.gif

Pomóżcie.


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
LowiczakPL
post 22.02.2021, 18:43:45
Post #2





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

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


Twoje założenia moja wersja detekcji

  1. $re = '/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-\+=&;%@\.\w_]*)#?(?:[\.\!\/\\\\\w]*))?)/m';
  2. $str = 'https://wp.pl wasddp.pl a to jest strona.strona
  3. www.ada.pl
  4. <a href="http://as.pl" target="_blank">http://as.pl</a>
  5. ';
  6.  
  7. preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
  8.  
  9. // Print the entire match result
  10. var_dump($matches);
  11.  


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post
sadistic_son
post 22.02.2021, 23:07:47
Post #3





Grupa: Zarejestrowani
Postów: 1 467
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


No ok, coś robi - rzeczywiście wrzuca do tablicy tylko same linki, ale jak ma mi to pomóc? W tablicy mam kilka wystąpień tego samego stringa. Nie wiem jak miałbym wziąć cały string, cały tekst i podmienić tylko te stringi (linki) w nim, które mam w tablicy.
Twój przykład nie przekształci tego:
  1. $str = 'https://wp.pl wasddp.pl a to jest strona.strona
  2. www.ada.pl
  3. ';

w to:
Kod
<a href="https://wp.pl">https://wp.pl</a> wasddp.pl a to jest strona.strona
<a href="www.ada.pl">www.ada.pl</a>
';


Sama detekcja mi nie wystarczy, bo za cienki jestem w regexy i nie rozumiem działania funkcji na nich operujących. Naprowadź mnie pls jak osiągnąć to co zamierzam, używając Twojej detekcji.
Dzięki.

Ten post edytował sadistic_son 22.02.2021, 23:24:22


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
trueblue
post 23.02.2021, 12:42:53
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Kod
$regex = '/(.*?)(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})/';
$str = 'Jest strona www.domena.pl , jest też http://domena.pl oraz jest inna: https://domena.pl, są pewnie też inne strony.';
echo preg_replace($regex, '$1<a href="$2">$2</a>$3', $str);


Ten post edytował trueblue 23.02.2021, 13:00:45


--------------------
Go to the top of the page
+Quote Post
sadistic_son
post 23.02.2021, 13:30:47
Post #5





Grupa: Zarejestrowani
Postów: 1 467
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Wspaniale, jesteśmy coraz bliżej celu.
Wszystko działa pięknie dla stringów http:// , https:// http://www .
Jedynie www.wp.pl przekonwertuje na adres_mojego_servera.pl/www.wp.pl sad.gif
Dlaczego tak się dzieje?


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
trueblue
post 23.02.2021, 13:55:07
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Kod
$str = 'Jest strona www.domena.pl , jest też http://domena.pl oraz jest inna: https://domena.pl, są pewnie też inne strony.';
$regex = '/(.*?)(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})/';
$regex2 = '/<a(.*?)href="(?!http:\/\/|https:\/\/)/';
$str = preg_replace([$regex,$regex2], ['$1<a href="$2">$2</a>$3', '<a$1href="http://$2'], $str);
echo $str;


--------------------
Go to the top of the page
+Quote Post
sadistic_son
post 24.02.2021, 17:51:17
Post #7





Grupa: Zarejestrowani
Postów: 1 467
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


@trueblue - doceniam Twoją pomoc, ale ten kod nie działa, a ja nie potrafię znaleźć błędu. Do tego jeszcze mój hosting zrezygnował z wyświetlania błędów i teraz wali tylko HTTP ERROR 500 gdy coś jest nie tak, żadnych podpowiedzi sad.gif

Ten post edytował sadistic_son 24.02.2021, 17:52:17


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
viking
post 24.02.2021, 19:14:10
Post #8





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Ty sterujesz wyświetlaniem błędów a nie twój hosting. Poczytaj przyklejony temat.


--------------------
Go to the top of the page
+Quote Post
trueblue
post 24.02.2021, 19:15:08
Post #9





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


http://sandbox.onlinephpfunctions.com/code...0fd0413907fe300


--------------------
Go to the top of the page
+Quote Post
LowiczakPL
post 25.02.2021, 07:52:00
Post #10





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

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


po modfikacji , rozpoznaje wielki litery i przecinek usunięty z adresu

Kod
    $str = 'Jest strona WWW.domenA.pl,
    jest też http://domena.PL jest i http://www.Domena.pl,
    oraz jest inna: https://domena.pl, są pewnie też inne strony.';
    $regex = '/(.*?)(https?:\/\/(?:www\.|(?!www))[\w\d][\w\d-]+[\w\d]\.[^\s\,]{2,}|www\.[\w\d][\w\d-]+[\w\d]\.[^\s\,]{2,}|https?:\/\/(?:www\.|(?!www))[\w\d]+\.[^\s]{2,}|www\.[\w\d]+\.[^\s\,]{2,})/i';
    $regex2 = '/<a(.*?)href="(?!http:\/\/|https:\/\/)/';
    $str = preg_replace([$regex,$regex2], ['$1<a href="$2">$2</a>$3', '<a$1href="http://$2'], $str);
    echo $str;


Ten post edytował LowiczakPL 25.02.2021, 07:52:54


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post
sadistic_son
post 25.02.2021, 11:01:30
Post #11





Grupa: Zarejestrowani
Postów: 1 467
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Ewidentnie ta jedna linijka wywala mi skrypt:
  1. $str = preg_replace([$regex,$regex2], ['$1<a href="$2">$2</a>$3', '<a$1href="http://$2'], $str);

Czy to możliwe, że ta funkcja działa inaczej (bądź nie działa w ogóle) w zależności od wersji php (oczywiście dla wersji po jej wprowadzeniu)? Mój hosting jest na PHP Version 5.2.17

Ten post edytował sadistic_son 25.02.2021, 11:05:54


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
trueblue
post 25.02.2021, 11:07:31
Post #12





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Z tego co widzę argumenty do preg_replace można przekazywać jako tablice od wersji 5.4, choć dokumentacja o tym nie pisze.
Albo zmień wersję PHP (naprawdę 5.2?questionmark.gif), albo użyj dwóch oddzielnych preg_replace.


--------------------
Go to the top of the page
+Quote Post
sadistic_son
post 25.02.2021, 13:34:02
Post #13





Grupa: Zarejestrowani
Postów: 1 467
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Rzeczywiście, wersja php była winna. Nie wiedziałem, że jak hosting się migruje na nowszą wersję to ja też muszę zmienić w ustawieniach domeny wersję której chcę używać, więc byłem na 5.2 ciągle biggrin.gif
Wspaniele teraz wszystko działa!
Dzięki wielkie za pomoc koledzy!

PS to chyba koniec mojej zabawy z php sad.gif Kiedyś uczyłem się tego na studiach, zaczynałem od wersji 3. Obiektowo nigdy nie nauczyłem się. Jak przełaczyłem dziś na hostingu na wersję 7.2 to wywaliło mi 2 strony errorów że używam deprecjonowanych funkcji. Bawię się tylko hobbistycznie, prowadząc malutkie forum dla kilku kumpli. Nie nadążam za tymi ciągłymi zmianami w rozwoju php sad.gif Chyba nadszedł zmierzch mojego laickiego programowania sad.gif

Ten post edytował sadistic_son 25.02.2021, 13:37:50


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
LowiczakPL
post 25.02.2021, 18:00:51
Post #14





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

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


Zmień na 5.6.x w maksymalenej wersji X jaką możesz dać i to powinno pomóc, w 7 jest mnóstwo zmian, stary kod raczej nie pójdzie na 7

Ten post edytował LowiczakPL 25.02.2021, 18:02:15


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
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: 29.03.2024 - 02:01