![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 160 Pomógł: 0 Dołączył: 27.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem sobie taką funkcję:
Specialnie dodałem po jednej wartości do tablic. Działa on w ten sposób, że przy zastosowaniu funkcji zamienia mi np. [cokolwiek] na "echo 'cokolwiek'". Problem w tym, że preg_replace nie parsuje php i dlatego moje "echo 'cokolwiek'" pozostaje widoczne w kodzie (nawet jeżeli dodam <? i ?> to też je widać). Pomyślałem więc o eval. Zrobiłem wpierw tak:
Ale wtedy miałem parse error gdy kod zawierał np. normalny tekst czy tagi html. Pomyślałem więc o evaluowaniu samej tablicy zamień:
Ale też miałem byki, bo eval nie parsuje tablic. Zdecydowałem się na najwolniejszą z możliwości:
Teraz tekst jest parsowany, ale mam błędy w wynikach, ponieważ tekst zostaje parsowany ZANIM preg_replace go zamieni, czyli w rezultacie widzę "/1" zamiast "cokolwiek". Może zadanie trudne - ale jak sobie poradzić z tym, żeby preg_replace najpierw zamieniało, a potem TYLKO zamieniony tekst został parsowany? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 91 Pomógł: 0 Dołączył: 7.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 160 Pomógł: 0 Dołączył: 27.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
Z tym już kombinowałem, tzn. samo danie \\1. Oczywiście tekst wyświetla, ale np. chciałbym dodać "echo $zmienna['\\1'];" do tablicy i co wtedy? Z Twoim sposobem także wyświetla mi to jako tekst, a ja chcę, żeby najpierw zamieniło się na "echo $zmienna['cokolwiek'];" a potem zostało przeparsowane i wyświetliło tą zmienną (tutaj wystarczy eval), ale jak zastosować eval po przeparsowaniu - sposobu jeszcze nie znalazłem. Jednak dzięki za odpowiedź i czekam na dalsze sugestie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Ten post edytował LamaMASTER 7.04.2006, 21:32:18 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 91 Pomógł: 0 Dołączył: 7.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
tak (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
albo tak
Ten post edytował phobos 7.04.2006, 22:43:04 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 160 Pomógł: 0 Dołączył: 27.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
Też próbowałem, ale przypuśćmy, że robię sobie tak:
lol("<div align="center">[cokolwiek]</div>"); i teraz po przeparsowaniu mam błąd w divie, bo jest zapisany bez echo. Rozumiesz o co chodzi? W tym właśnie jest problem. Kombinowałem różnie z tym i jedyne co mi przychodzi do głowy, to przeparsowanie jedynie zamienionego tekstu, nie całości |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 332 Pomógł: 6 Dołączył: 13.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
może preg_replace_callback ? albo modyfikator "e" ?
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 91 Pomógł: 0 Dołączył: 7.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
ej czyli ty chcesz cos takiego
w tablicy chcesz miec "echo <div aling='center'>cokolwiek</div>" ale zeby na stronce to sie wyswietlalo samo cokolwiek (tyle ze na srodku) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 160 Pomógł: 0 Dołączył: 27.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
Wave - posprawdzam.
Phobos - nie sugeruj się przykładem jaki podaję, on nie ma związku, wiem, że to można zrobić prościej, ale chcę np. mieć tak: funkcja('<div align="center">[cokolwiek]</div>'); niech mi zamieni na <div align="center">cokolwiek</div>, ale pod warunkiem, że cokolwiek będzie w echo, tzn. echo 'cokolwiek'; Może być jeszcze inna funkcja zamiany zamiast preg_replace. Ważne, żeby działało. Chodzi głównie o to, żeby z większego tekstu pozamieniać kilka takich [coś] tak jak pisałem powyżej. edit callback pokazuje mi błąd: [...] preg_replace_callback() requires argument 2, 'Array', to be a valid callback [...] A według manuala powinno parsować, tylko kurcze chyba tablic nie obsługuje (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) edit Myślałem jeszcze nad array_merge:
Musiałbym to jak co przerobić, tekst parsuje, ale w wyniku mam tylko napis "Array" - dlaczego? Ten post edytował LamaMASTER 9.04.2006, 19:10:36 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 91 Pomógł: 0 Dołączył: 7.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
aha czyli ty chcesz aby byla taka funkcja ktora przeszuka caly tekst i pozamienia wszystkie " [costam] " na " costam ", czyli prosciej mowiac pousuwa nawiasy??
bo jak tak to sprubuj cos takiego ereg_replace("szukany slowo","slowo zamienne","jakis tekst") czyli np
Ten post edytował phobos 10.04.2006, 14:24:55 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 160 Pomógł: 0 Dołączył: 27.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
Nieeee. Pousuwać nawiasy to ja mogę za pomocą str_replace
$wynik = str_replace("[", "", $wynik); Ale nie w tym rzecz. Przecież to by był banał. Ja bym chciał, żeby mi wszystkie [cokolwiek] zamieniło na dosłownie echo 'cokolwiek'; i przeparsowało php. Np. potem chciałbym, żeby zamieniało [cokolwiek] na zmienną $cokolwiek i co wtedy? Usunę nawias i wyświetli mi cokolwiek, to nie ma sensu. Musi zamieniać na echo 'cokolwiek', inaczej nie pisałbym tego tematu |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 91 Pomógł: 0 Dołączył: 7.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
ok man zrobilem cos takiego funckja ktora w tekscie "<div align=\"center\">[cokolwiek]</div>" zmienia [cokolwiek] na $cokolwiek
a potem mozesz sobie za ta zmienan podstawic co chcesz i ona sie wyswietli
jak to nie to to masakra, napisz w punktach co chcesz zrobic :-) |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 160 Pomógł: 0 Dołączył: 27.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
Wielkie dzięki, to jest już postęp. Zastosowałem to w swojej funkcji, bo tak naprawdę to mam te <div align="center">[cokolwiek]</div> w innym pliku. Np. jest to zamiana.html. To teraz funkcja wygląda tak:
Dalej mam np. index.php i w nim:
Według mojego rozumowania - jest funkcja zamieniająca wszystkie [cokolwiek] na $cokolwiek, potem do zmiennej $string jest pobierana zawartość pliku zamiana.html, gdzie jest "<div align="center">[cokolwiek]</div>", na koniec zawartość ta jest zamieniana przez funkcję, parsowana i wyświetlana. W efekcie nie mam już naszczęście parse errorów itp., ale zamiast "to działa" widzę tylko średnik ; W czym teraz problem? (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 91 Pomógł: 0 Dołączył: 7.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
po pierwsze primo mussz zamienic
na to
po drugie primo stosujesz eval w funkcji
ale w tej funckji nie ma zdefiniowanej zmiennej $cokolwiek wiec takjakby $cokolwiek="" i temu nic ci sie nie wyswietla albo wywal eval na sam koniec tak jak ja zrobilem albo wczytuj $cokolwiek do funckji po trzecie primo
nie dawaj tam srednika na koncu ja juz go uzylem tutaj
Ten post edytował phobos 11.04.2006, 12:02:32 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 160 Pomógł: 0 Dołączył: 27.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
Cytat po pierwsze primo mussz zamienic nie dawaj tam srednika na koncu ja juz go uzylem tutaj Nieuwaga (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Wielkie dzięki, teraz to działa jak trzeba (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Spróbuję sobie to teraz urozmaicić jeszcze i jak coś to się zgłoszę ponownie (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) edit Wszystko działa fajnie, jednak co jeśli chciałbym mieć np. zamiast [cokolwiek] zmienną, a zamiast [plik:cokolwiek] include pliku? Taki mini system szablonów. Aktualnie mam tak:
I chciałbym teraz zrobić tak:
No i właśnie nie wiem jak dodać drugą pozycje w tablicy. Include dać nie mogę, bo wszystko poprzedzane jest echo. Próbowałem usunąć poprzedzające echo i wpisywać je w tablicy, ale mam znowu mój stary parse error. Byłbym wdzięczny za rozwiązanie problemu i najchętniej jeżeli się da to chciałbym, żebym mógł bawić się w tablicy tak:
bo te definiowanie zmiennych to trochę taka sprawa, że wolniej generuje stronę jeżeli tych zmiennych jest dużo. W dodatku include do zmiennej nie da się dodać. Z góry dzięki! Ten post edytował LamaMASTER 11.04.2006, 13:47:23 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 91 Pomógł: 0 Dołączył: 7.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
sluchaj ale jest jeden szczegół
popatrz dla takiego czegos "[plik:cokolwiek]" wyrazenie "#\[(.*?)\]#si",jak i "#\[plik(.*?)\]#si" zwruca true ja proponuje zebys zamienil je miejscami czyli daj w tablicy tak
i teraz takie cos
pozniej ten preg_replace i teraz w zalerznosci od $index mozesz sobie dac echo albo include Ten post edytował phobos 11.04.2006, 15:23:32 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 160 Pomógł: 0 Dołączył: 27.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
Kurcze Ty to masz łeb (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Teraz się trochę pogubiłem, więc to ma być tak?:
edit Sprawdziłem. W rezultacie mam mój stary błąd: Cytat Parse error: parse error, unexpected '<' in [...] : eval()'d code on line 1
Ten post edytował LamaMASTER 11.04.2006, 16:23:37 |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 91 Pomógł: 0 Dołączył: 7.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
mam takie cos tylko tam se pozniej pozamieniaj na ten plik ktory ty chcesz wczytac
i teraz jak bedzie [cokolwiek] to wypisze zmienna $cokolwiek a jak bedzie [plik:cokolwiek] to zaincluduje plik ktory jest podany w zmiennej $cokolwiek Ten post edytował phobos 11.04.2006, 16:36:55 |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 160 Pomógł: 0 Dołączył: 27.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
Ale kombinujesz na około, jak było print tak jest hehe, tylko te średniki. Nie idzie tego zrobić tak jak chciałem, żeby w tablicy podawać prosto funkcje, bez takich kombinacji ze średnikami itp.?
W dodatku nie parsuje za dobrze i po zamianie widzę: "); include(\'cokolwiek.html'); print (" |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 91 Pomógł: 0 Dołączył: 7.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
tzn chodzi o to ze jak masz <div....> to pozniej ja dasz samo include to on bedzie probowal zrobic takie cos
include(<div align='center'>costam.html</div>)"; a takiego pliku napewni nie masz a jak zastosowalem print i pozniej ta"zabawe srednikami" to div bedzie dziaall i inculde tez bo masz takie cos print(<div align='center');inculde('costam.html');print(</div>)"; mozesz sobie usunac ten print i te sredniki ale bedziesz mial parse error jak bedziesz dawal do funkcji <div align='center'>[plik:costam]</div> chyba ze jeszcze przed dostarczeniem tektu do funkcji podzielisz go na takie czesci 1-- <div align='center'> 2-- [plik:costam] 3--</div> pozniej do funcki dasz tylko te 2 czesc a potem na nowo skleisz calosc |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 160 Pomógł: 0 Dołączył: 27.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
O to zleksza kiepsko. Czemu jest ten parse error? A nawet jeśli bym miał print(<div align='center');inculde('costam.html');print(</div>)"; to i tak include powino zadzialać, bo w końcu jest po średniku. Dzielenie pliku na części też nie ma sensu, bo jak znaczników będzie więcej i jak tagów też będzie więcej? Najlepszy sposób byłby taki, że po prostu parsowana byłaby jedynie zawartość zamienionego znacznika po zamianie, ale z tego co widzę nie ma takiej możliwości. Usunąć print też nie ma możliwości żeby nie było parse errora? Kurcze no tak nie może być... jest jakiś inny replacer prócz preg_replace? Albo mógłbym skorzystać z samego zamieniania na zmienne, gdyby nie to, że jeśli zrobię np. $zmienna = include('plik'); to nie zadziała. Fatalnie. Masz jakieś propozycje żeby te dwa znaczniki działały i się nie gryzło nic?
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 11:43 |