![]() |
![]() ![]() |
![]() |
![]()
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. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 130 Pomógł: 1 Dołączył: 29.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
wczesniej dodaj:
Kod $body = stripslashes($body);
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
Wywal flagę e z wyrażenia.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 2.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
stripslahes oczywiście nic nie daje.
A kiedy wyrzucę flagę, to w ogóle nie podmienia mi tekstu (wszystko zostaje w znacznikach <FNC>). [a właściwie to dlaczego?? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ] Sprawdźcie u siebie. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 2.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
No, tak.
Ale spróbuj coś takiego:
Chodzi o to, żeby pomiędzy znacznikami znalazła się wartość zwracana przez funkcję zadeklarowaną wcześniej. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 235 Pomógł: 2 Dołączył: 30.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 2.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie, $body pobieram z bazy danych. Nie mogę tak zrobić.
ps. A i tak: Warning: preg_replace() [function.preg-replace]: Unknown modifier 'F' in D:\WWW\tmp\index.php on line 7 |
|
|
![]()
Post
#9
|
|
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:
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>) |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 2.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Właśnie chciałem uniknąć evala. Stąd te wyrażenia reg.
Ktoś może wie, czemu nie przechodzi w preg_replace cudzysłów z funkcji? |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
Zwykłe preg replace z flagą e też robi coś w rodzaju evala:
(Co ciekawe zamiana print na echo powoduje wyrzucenie błedu :|) Cytat Ktoś może wie, czemu nie przechodzi w preg_replace cudzysłów z funkcji? Przed znakami cudzysłowia w znalezionym tekście pojawiły się backshashe, które zakłócały pracę preg_replace'owego evala. Kolejna dziwna rzecz :| Ten post edytował Kicok 4.07.2007, 17:44:55 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.09.2025 - 17:49 |