Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] preg_replace + str_replace
Forum PHP.pl > Forum > Przedszkole
tenloginjestzajety
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.
Tomplus
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. }
tenloginjestzajety
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
viking
A tak w szerszym ogl±dzie co chcesz zrobić?
tenloginjestzajety
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.
viking
No ok. Ale w bazie trzymasz html czy tekst? Bo str_replace sugeruje że masz tagi.
tenloginjestzajety
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.
viking
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.
tenloginjestzajety
Dziękuje wszystkim, działa. Też kombinowałem z callback, ale nie mogłem załapać zasady działania na przykładach z manuala.
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.