Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] preg_replace + str_replace, zamiana tekstu w linki, usunięcie znaku + z anchora
tenloginjestzaje...
post 14.03.2019, 19:40:57
Post #1





Grupa: Zarejestrowani
Postów: 355
Pomógł: 1
Dołączył: 20.07.2014

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


Witam
Nie mogę sobie poradzić z usunięciem znaku + z anchora linku:
  1. $preg_replace = array('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-+żźśłąęóŻŹŚŁĄĘÓ.-]*(\?\S+)?[^\.\s])?)?)@',);
  2. $search_replace = array('<a href="$1">$1</a>');
  3. $string = preg_replace($preg_replace, $search_replace, $string);


Kompletnie nie wiem jak się za to zabrać, dzięki
Ps. str_replace w $search_replace nie działa.

Ten post edytował tenloginjestzajety 14.03.2019, 19:42:38


--------------------
Nigdy nie zapominam kliknąć "pomógł". Zastosowanie na stronie [prosze nie spamuj]
Go to the top of the page
+Quote Post
Tomplus
post 15.03.2019, 11:36:20
Post #2





Grupa: Zarejestrowani
Postów: 1 336
Pomógł: 158
Dołączył: 20.03.2005
Skąd: Będzin

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


Nie wiem co CI ten plus przeszkadza:

Działający kod jest taki, ale jeżeli chciałbym zlikwidować plus, to po lub przed zamianą tekstu zrobiłbym usuwanie znaków nielegalnych.
  1. url = '/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/';
  2. $string= preg_replace($url, '<a href="$0" target="_blank" title="$0">$0</a>', $string);
  3. echo $string;


Czyli:
  1. if(sprawdzCzyLink($string)) {
  2. usunNieleganeZnaki($string);
  3. $string = zamienNaHtml($string);
  4. }
Go to the top of the page
+Quote Post
tenloginjestzaje...
post 23.03.2019, 14:15:47
Post #3





Grupa: Zarejestrowani
Postów: 355
Pomógł: 1
Dołączył: 20.07.2014

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


Nie bardzo to działa, ogólnie robię tak:
Zamieniam wszystko na linki, a później chce zamienić po "> wszystkie + na spacje.

Zamiana na linki
  1. $preg_replace = array('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-+żźśłąęóŻŹŚŁĄĘÓ.-]*(\?\S+)?[^\.\s])?)?)@',);
  2. $search_replace = array('<a href="$1">$1</a>');
  3. $string = preg_replace($preg_replace, $search_replace, $string);


Zamiana + w tytule linku, nie działa:
  1. $string = preg_replace('@">(\+)<\/@', ' ', $string);
  2. echo $string;

Dzięki


--------------------
Nigdy nie zapominam kliknąć "pomógł". Zastosowanie na stronie [prosze nie spamuj]
Go to the top of the page
+Quote Post
viking
post 23.03.2019, 14:24:09
Post #4





Grupa: Zarejestrowani
Postów: 5 096
Pomógł: 856
Dołączył: 30.08.2006

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


A tak w szerszym oglądzie co chcesz zrobić?


--------------------
Go to the top of the page
+Quote Post
tenloginjestzaje...
post 23.03.2019, 15:19:17
Post #5





Grupa: Zarejestrowani
Postów: 355
Pomógł: 1
Dołączył: 20.07.2014

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


Pobieram tekst z bazy z adresami http oraz https, które zamieniam na linki. W tekście tym są również adresy http mojej strony, której podstrony zawierają znak + w miejscu spacji

Zapis w bazie:
Jakiś tekst tekst https://mojastrona.pl/podstrony/jakaś+podstrona tekst tekst

W efekcie otrzymuje taki link, bo stosuje jeszcze str_replace :
  1. str_replace('">https://mojastrona.pl/podstrony/', '">', $string)


czyli otrzymuje taki link w tekście:

jakaś+podstrona a chciałbym pozbyć się jeszcze tego plusa w tytule linku, bo w adresie musi być czyli patrząc na kod źródłowy pożądany efekt to:

<a href="https://mojastrona.pl/podstrony/jakaś+podstrona">jakaś podstrona</a> pozostałe strony jako linki w tytule zawierają cały adres strony, bo na nich mi nie zależy czyli:
<a href="http://forum.php.p">http://forum.php.pl</a> i to jest ok, dotyczy tylko podstron mojej domeny.


--------------------
Nigdy nie zapominam kliknąć "pomógł". Zastosowanie na stronie [prosze nie spamuj]
Go to the top of the page
+Quote Post
viking
post Wczoraj, 07:06
Post #6





Grupa: Zarejestrowani
Postów: 5 096
Pomógł: 856
Dołączył: 30.08.2006

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


No ok. Ale w bazie trzymasz html czy tekst? Bo str_replace sugeruje że masz tagi.


--------------------
Go to the top of the page
+Quote Post
tenloginjestzaje...
post Wczoraj, 13:04
Post #7





Grupa: Zarejestrowani
Postów: 355
Pomógł: 1
Dołączył: 20.07.2014

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


w bazie normalny tekst:

przykład:

jakiś tekst https://forum.php.pl dalszy tekst.

Nie wiem czy jest jakaś muti funkcja preg na zasadzie, żeby jedno wyrażenie regularne było dla adresu http, a drugie dla tytułu linku, na zasadzie: <a href="$1">$2</a> to rozwiązałoby problem.


--------------------
Nigdy nie zapominam kliknąć "pomógł". Zastosowanie na stronie [prosze nie spamuj]
Go to the top of the page
+Quote Post
viking
post Wczoraj, 13:28
Post #8





Grupa: Zarejestrowani
Postów: 5 096
Pomógł: 856
Dołączył: 30.08.2006

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


No ale skoro link masz a w opisie potrzebujesz tylko ostatni człon to możesz nawet explode i str_replace na ostatnim elemencie explode.


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post Wczoraj, 18:05
Post #9





Grupa: Zarejestrowani
Postów: 7 662
Pomógł: 1349
Dołączył: 26.10.2005

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


http://sandbox.onlinephpfunctions.com/code...9628af602885f93
Go to the top of the page
+Quote Post
tenloginjestzaje...
post Wczoraj, 19:22
Post #10





Grupa: Zarejestrowani
Postów: 355
Pomógł: 1
Dołączył: 20.07.2014

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


Dziękuje wszystkim, działa. Też kombinowałem z callback, ale nie mogłem załapać zasady działania na przykładach z manuala.


--------------------
Nigdy nie zapominam kliknąć "pomógł". Zastosowanie na stronie [prosze nie spamuj]
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 25.03.2019 - 07:24