Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP] preg_replace + str_replace

Napisany przez: tenloginjestzajety 14.03.2019, 19:40:57

Witam
Nie mogę sobie poradzić z usunięciem znaku + z anchora linku:

  1. $preg_replace = http://www.php.net/array('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-+żĽ¶ł±ę󯬦ŁˇĘÓ.-]*(\?\S+)?[^\.\s])?)?)@',);
  2. $search_replace = http://www.php.net/array('<a href="$1">$1</a>');
  3. $string = http://www.php.net/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.

Napisany przez: Tomplus 15.03.2019, 11:36:20

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= http://www.php.net/preg_replace($url, '<a href="$0" target="_blank" title="$0">$0</a>', $string);
  3. http://www.php.net/echo $string;


Czyli:
  1. if(sprawdzCzyLink($string)) {
  2. usunNieleganeZnaki($string);
  3. $string = zamienNaHtml($string);
  4. }

Napisany przez: tenloginjestzajety 23.03.2019, 14:15:47

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 = http://www.php.net/array('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-+żĽ¶ł±ę󯬦ŁˇĘÓ.-]*(\?\S+)?[^\.\s])?)?)@',);
  2. $search_replace = http://www.php.net/array('<a href="$1">$1</a>');
  3. $string = http://www.php.net/preg_replace($preg_replace, $search_replace, $string);


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

Dzięki

Napisany przez: viking 23.03.2019, 14:24:09

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

Napisany przez: tenloginjestzajety 23.03.2019, 15:19:17

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. http://www.php.net/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.

Napisany przez: viking 24.03.2019, 07:06:10

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

Napisany przez: tenloginjestzajety 24.03.2019, 13:04:30

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.

Napisany przez: viking 24.03.2019, 13:28:59

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.

Napisany przez: Pyton_000 24.03.2019, 18:05:44

http://sandbox.onlinephpfunctions.com/code/78b5376a1800d61b4c56ce7fc9628af602885f93

Napisany przez: tenloginjestzajety 24.03.2019, 19:22:10

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)