Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Preg replace i funkcje
fastlone
post
Post #1





Grupa: Zarejestrowani
Postów: 95
Pomógł: 15
Dołączył: 3.06.2010

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


Witajcie.

Chcę, aby w funkcji preg_replace, jako drugi argument (czyli to, co ma wyjść) zastosować funkcję, w której zastosowana jest rzecz "zachowana z argumentu 1.
  1. $content = preg_replace("/\[userlink](.*?)\[\/userlink\]/si",
  2. build_profile_link(format_name($user_usergroupscache['$1']['username'], $user_usergroupscache['$1']['usergroup'], $user_usergroupscache['$1']['displaygroup']), $user_usergroupscache['$1']['uid']), $content);
  3.  

Ma to być swego rodzaju kod BBCode, lecz niestety po wprowadzeniu id w tagi [userlink] - dupa.
Go to the top of the page
+Quote Post
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Ok po pierwsze (nie wiem czy zauważyłeś) masz błąd:

  1. $content = preg_replace("/\[userlink\](.*?)\[\/userlink\]/si", // brakowało "\" przed "]"


ale do rzeczy... Ogólnie funkcja preg_replace przyjmuje jako 2 argument albo string albo array więc wprost się tego nie da zrobić.

Moja propozycja zczytać to do tablicy poprzez preg_match_all() i utworzyć dwie tabelki
- wejściową, w której umieścisz tekst do podmiany czyli np.: "[userlink]123[/userlink]"
- wyjściową, w której umieścisz wynik funkcji format_name(...)

Nastepnie dopiero dasz preg* lub str* _replace dając jako argumenty te 2 tabelki i po sprawie (IMG:style_emoticons/default/wink.gif)

Jak coś moge dać łatwy przykład

Ten post edytował Sephirus 20.10.2011, 15:32:05
Go to the top of the page
+Quote Post
fastlone
post
Post #3





Grupa: Zarejestrowani
Postów: 95
Pomógł: 15
Dołączył: 3.06.2010

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


Mógłbyś mi wytłumaczyć/naprowadzić, w jaki sposób to zrobić? Kompletnie nie mam pojęcia.
Go to the top of the page
+Quote Post
Sephirus
post
Post #4





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Ok już pisze daj mi 5 minut

EDIT: Już (IMG:style_emoticons/default/smile.gif)

  1. $content; // W tym mamy treść
  2.  
  3. if(preg_match_all('/\[userlink\](.+)\[\/userlink\]/Usi',$content,$matches)) // zwróć uwagę na flagę U w preg'u - żeby uniknąć pobrania szerszej "wersji tego znacznika BB"
  4. {
  5. $inArray = array();
  6. $outArray = array();
  7. for($i = 0; $i < count($matches[0]); $i++)
  8. {
  9. $inArray[] = $matches[0][$i];
  10. $outArray[] = twoja_funkcja($matches[1][$i]);
  11. }
  12.  
  13. $content = str_replace($inArray,$outArray,$content);
  14. }
  15. echo $content;


I tyle - podmień swoją funkcję tylko tak jak jej używasz i tyle.

Moga tu być jakieś blędy bo pisałem szybko.

EDIT: Dodałem IF'a w razie jakby nie było tego znacznika [userlink] w treści.

Ten post edytował Sephirus 20.10.2011, 15:42:29
Go to the top of the page
+Quote Post
fastlone
post
Post #5





Grupa: Zarejestrowani
Postów: 95
Pomógł: 15
Dołączył: 3.06.2010

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


Sephrius - jesteś wielki (IMG:style_emoticons/default/tongue.gif)
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: 5.10.2025 - 14:42