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.
$url = '@(http(s)?)?(://)?(([a-zA-Z])([-\w]+\.)+([^\s\.]+[^\s]*)+[^,.\s])@'; $string = http://www.php.net/preg_replace($url, '<a href="http$2://$4" target="_blank" title="$0">$0</a>', $string); $row[3]=$string;*/
Twoje założenia moja wersja detekcji
$re = '/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-\+=&;%@\.\w_]*)#?(?:[\.\!\/\\\\\w]*))?)/m'; $str = 'https://wp.pl wasddp.pl a to jest strona.strona www.ada.pl <a href="http://as.pl" target="_blank">http://as.pl</a> '; http://www.php.net/preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0); // Print the entire match result http://www.php.net/var_dump($matches);
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:
$str = 'https://wp.pl wasddp.pl a to jest strona.strona www.ada.pl ';
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
Dlaczego tak się dzieje?
@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
Ty sterujesz wyświetlaniem błędów a nie twój hosting. Poczytaj przyklejony temat.
http://sandbox.onlinephpfunctions.com/code/2309e5f7b3d8d09460b8790480fd0413907fe300
po modfikacji , rozpoznaje wielki litery i przecinek usunięty z adresu
Ewidentnie ta jedna linijka wywala mi skrypt:
$str = http://www.php.net/preg_replace([$regex,$regex2], ['$1<a href="$2">$2</a>$3', '<a$1href="http://$2'], $str);
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?), albo użyj dwóch oddzielnych preg_replace.
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
Wspaniele teraz wszystko działa!
Dzięki wielkie za pomoc koledzy!
PS to chyba koniec mojej zabawy z php 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 Chyba nadszedł zmierzch mojego laickiego programowania
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
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)