Witam
Nie mogę sobie poradzić z usunięciem znaku + z anchora linku:
$preg_replace = http://www.php.net/array('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-+żĽ¶ł±ę󯬦ŁˇĘÓ.-]*(\?\S+)?[^\.\s])?)?)@',); $search_replace = http://www.php.net/array('<a href="$1">$1</a>'); $string = http://www.php.net/preg_replace($preg_replace, $search_replace, $string);
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.
url = '/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/'; $string= http://www.php.net/preg_replace($url, '<a href="$0" target="_blank" title="$0">$0</a>', $string); http://www.php.net/echo $string;
if(sprawdzCzyLink($string)) { usunNieleganeZnaki($string); $string = zamienNaHtml($string); }
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
$preg_replace = http://www.php.net/array('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-+żĽ¶ł±ę󯬦ŁˇĘÓ.-]*(\?\S+)?[^\.\s])?)?)@',); $search_replace = http://www.php.net/array('<a href="$1">$1</a>'); $string = http://www.php.net/preg_replace($preg_replace, $search_replace, $string);
$string = http://www.php.net/preg_replace('@">(\+)<\/@', ' ', $string); http://www.php.net/echo $string;
A tak w szerszym ogl±dzie co chcesz zrobić?
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 :
http://www.php.net/str_replace('">https://mojastrona.pl/podstrony/', '">', $string)
No ok. Ale w bazie trzymasz html czy tekst? Bo str_replace sugeruje że masz tagi.
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.
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.
http://sandbox.onlinephpfunctions.com/code/78b5376a1800d61b4c56ce7fc9628af602885f93
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)