Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> preg_replace i usuwanie literek "n", "s" oraz "b"
piotrek4team
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 27.06.2009

Ostrzeżenie: (0%)
-----


Witam (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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)(IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




&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:]
Go to the top of the page
+Quote Post
piotrek4team
post
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 27.06.2009

Ostrzeżenie: (0%)
-----


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?? (IMG:style_emoticons/default/smile.gif)

//edit
już rozwiązałem problem (IMG:style_emoticons/default/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

Ten post edytował piotrek4team 4.09.2009, 14:59:29
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 13:26