Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wyrażenie regularne + funkcje użytkownika, problemy z cudzysłowiami
rimk
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 2.07.2007

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


Witam. Mam tekst dajmy na to: "AA dfs <FNC>srodtytul("dlatego to wszystko")</FNC> dfsd". Chce zastąpić zawartość znaczników <FNC></FNC> na wartość funkcji, która znajduje się pomiędzy nimi. Wszystko działa dobrze, dopóki nie pojawia się funkcja z atrybutem w cudzysłowiu, czyli dla np "hr()" wszystko jest ok.

Wyrażenie: $body = preg_replace('/<FNC>(.*?)<\/FNC>/e','\\1',$body);
Błąd, który wyskakuje:

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in D:\WWW\trajektoria\index.php(29) : regexp code on line 1

Parse error: syntax error, unexpected $end in D:\WWW\trajektoria\index.php(29) : regexp code on line 1

Fatal error: preg_replace() [function.preg-replace]: Failed evaluating code: srodtytul(\"dlatego to wszystko\") in D:\WWW\trajektoria\index.php on line 29


ps. W oryginalnym tekscie nie ma backslashów.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Da się to rozwiązać używając funkcję preg_replace_callback" title="Zobacz w manualu PHP" target="_manual:

  1. <?php
  2.  
  3.  
  4. function srodtytul( $text )
  5. {
  6. return "<b>{$text}</b>";
  7. }
  8.  
  9. function cosInnego( $text )
  10. {
  11. return "<u>{$text}</u>";
  12. }
  13.  
  14.  
  15.  
  16. function callbackFunction( $matches )
  17. {
  18. eval( "$text = {$matches[1]};" );
  19. return $text;
  20. }
  21.  
  22. $body = 'AA dfs <FNC>srodtytul("dlatego to wszystko")</FNC> df<br />
  23.  sd afsf as <FNC>cosInnego("podkreślony tekst")</FNC>s asf ';
  24.  
  25. $body = preg_replace_callback( '/<FNC>(.*?)</FNC>/i', 'callbackFunction', $body );
  26. echo $body;
  27.  
  28. ?>



Mam nadzieję, że zdajesz sobie sprawę z tego, że takie rozwiązanie naraża cię na wielkie niebezpieczeństwo (szczególnie, jeśli wszyscy użytkownicy będą mogli używać tagów <FNC></FNC>)
Go to the top of the page
+Quote Post

Posty w temacie


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: 10.10.2025 - 20:01