Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [wyr. regularne] problem z \n
BzikOS
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

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


Chodzi o prosty system szablonow.

Plik z szablonami wyglada tak:
[xml:1:11f6c747ac]
<!-- BEGIN szablonik1 -->
Tu jakis tekst<br>
i jeszcze tu
<hr>
Pieknie
<!-- END szablonik1 -->

<!-- BEGIN szablnik2 -->
cos tam cos
<!-- END szablonik2 -->
[/xml:1:11f6c747ac]

I kawalek kodu klasy, odpowiedzialny za wczytanie danego szablonu (wykastrowany nieco z nieistotnych rzeczy):
[php:1:11f6c747ac]<?php
$atpl = fread(fopen($tpl_file, 'r'), filesize($tpl_file));

$atpl = str_replace('', '', $atpl);
$atpl = str_replace(''', ''', $atpl);
$atpl = str_replace("n", "", $atpl); // <------------

if(preg_match("#<!-- BEGIN $template -->(.*?)<!-- END $template -->#", $atpl)) {

$atpl = preg_replace('#<!-- BEGIN (.*?) -->(.*?)<!-- END (.*?) -->#', '$szablon['1'] = '2';', $atpl);

$szablon = Array();

eval($atpl);
Return $szablon[$template];

} else {

$this->error("Can't open template: $template");

}
?>[/php:1:11f6c747ac]

Działało to dobrze dopóki było na serverze postawionym na linuxie, niestety ostatnio musiałem przesiąść się na jakiegos krasnala i też działa, ale nie tak jak należy, ponieważ do przeglądarki wysyłany jest cały kod w jednej linii (zamiana znaku konca linii następuje w chwili wczytania szablonu, tylko nie wiem dlaczego na linuxie było dobrze, a pod win robi sie jak robi).

Jeśli zostawię znaki końca linii, to wyskakuje błąd: Can't open templ... czyli nie pasuje do wzorca w preg_match (no i w preg_replace też nie).
Pytanie: jak zmodyfikować wyrażenia, bądź sam szablon, aby zostały znaki końca linii??
Go to the top of the page
+Quote Post
adwol
post
Post #2





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

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


Cytat
Pytanie: jak zmodyfikować wyrażenia, bądź sam szablon, aby zostały znaki końca linii??

Nie wiem czy to będzie miało jakieś znaczenie ale w windowsie koniec linii oznaczony jest dwoma znakami rn i gdy zamieniasz:
[php:1:d33a61a520]<?php
$atpl = str_replace("n", "", $atpl);
?>[/php:1:d33a61a520]
nadal pozostaje tam znak na końcu r.
Go to the top of the page
+Quote Post
BzikOS
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

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


Tak, wiem, ale ja właśnie chcę się pozbyć tej linii:
[php:1:7d62e22983]<?php
$atpl = str_replace("n", "", $atpl);
?>[/php:1:7d62e22983]

btw. jak dałem:
[php:1:7d62e22983]<?php
$atpl = str_replace("rn", "", $atpl);
?>[/php:1:7d62e22983]
to preg_match zwracał False.
Go to the top of the page
+Quote Post
KaMeLeOn
post
Post #4





Grupa: Zarejestrowani
Postów: 680
Pomógł: 0
Dołączył: 1.10.2002
Skąd: Wrocław

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


[php:1:60c0f301c2]<?php
$atp1 = ereg_replace("t|r|n|rn", "", $atp1);
?>[/php:1:60c0f301c2]


--------------------
"Czerp z innych, ale nie kopiuj ich. Bądź sobą." Michel Quoist
Go to the top of the page
+Quote Post
BzikOS
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

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


ERROR: Can't open template: mainview

Ehh, ale ja nie chcę pozbywać się znaków końca linii!! Tylko żeby pregi z nimi działały
Go to the top of the page
+Quote Post
KaMeLeOn
post
Post #6





Grupa: Zarejestrowani
Postów: 680
Pomógł: 0
Dołączył: 1.10.2002
Skąd: Wrocław

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


Ehm, BzikOS cos kręcisz raz chcesz usuwać raz nie chcesz...
Hmm, spróbuj tak:
[php:1:bbd62d63a1]<?php
if(preg_match("/<!-- BEGIN $template -->(.*?)<!-- END $template -->/s", $atpl))
{
// ...
}
else
{
// ...
}
?>[/php:1:bbd62d63a1]


--------------------
"Czerp z innych, ale nie kopiuj ich. Bądź sobą." Michel Quoist
Go to the top of the page
+Quote Post
BzikOS
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

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


Oooo to mi chodziło KaMeLeOn smile.gif

Poradziłem sobie właśnie przed chwilą z tym problemem, ale zaproponowany przez Ciebie sposób jest lepszy. Dzięki!
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 08:20