Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: preg_replace i usuwanie literek "n", "s" oraz "b"
Forum PHP.pl > Forum > PHP
piotrek4team
Witam winksmiley.jpg
mam następujący problem. napisałem prostą funkcję, która ma za zadanie zmianę zwykłego tekstu na link.

Funkcja ta akceptuje takie formy jak: "www.example.com", "example.com" oraz "http://www.example.com" + dalsze części adresu, np. zmienne get w PHP winksmiley.jpg

i nie mam zielonego pojęcia, dlaczego gdy jako string podam np: "nic.pl" to usuwa mi literkę "n".
Jakby jeszcze tego było mało, to jeśli napiszę
"dsadnnndsfsd nic.pl dfsdkfjnnnnnnds" to funkcja zwróci
"dsaddsfsd ic.pl dfsdkfjds"

Tak samo jest z literami "s" i "b".
Podejrzewałem że n jest traktowane jako "\n" no tylko problem w tym że string który dostaję się do funkcji nie jest wcześniej formatowany ;/
no i dlaczego wtedy b tez jest usuwane, a np r nie (\r)questionmark.gif dlatego teraz już nie wiem co jest grane.
szukałem w googlach i nic nie znalazlem :/


oto kod:
  1.  
  2. function link($string) {
  3. $string = preg_replace("@([\s&nbsp;]+|^)(https?:\/\/)?(((\w+\.)+\w{2,3})(\/.*?(\.\w+)?((\?|#|%)?[a-aZ-Z-0-9-&\-=_]+)?)?)([\s&nbsp;]+|$)@", "&nbsp;<a class=\"sbLink\"href=\"http:\/\/\\3\">\\3</a>&nbsp;", $string);
  4. return $string;
  5. }


z góry dzięki za pomoc smile.gif
thek
&nbsp w wyrażeniu Ci błąd powoduje. Dlatego kasuje Ci litery n, b, s i p. od tego jest znak specjalny w wyrażeniach. Użyj zamiast tego [:space:]
piotrek4team
no rzeczywiście to wina tego   no ale niestety [:space:] nie zadziała, bo całe to wyrażenie jest w perlu :/ gdyby było ereg_replace() to by zadziałało :/
w wyrażeniach regularnych perla jest tylko \s do odstępów, ale nie liczy to twardych spacji :/
czym zastąpić &nbsp?? smile.gif

//edit
już rozwiązałem problem winksmiley.jpg
napisałem tak:
  1. $string = preg_replace("@([\s]+| &nbsp|^)(https?:\/\/)?(((\w+\.)+\w{2,3})(\/.*?(\.\w+)?((\?|#|%)?[a-aZ-Z-0-9-&\-=_]+)?)?)([\s ]+|$)@", " <a class=\"sbLink\" href=\"http:\/\/\\3\">\\3</a> ", $string);


przy nbsp specjalnie nie dałem średnika, bo tutaj na forum jak umiesci się ten znak, to jest interpretowany i wychodzi ([\s]+| |^) ;p
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.