Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> preg_replace()
DEXTER_c
post
Post #1





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 8.12.2005

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


Używam pakietu phpdev.

Przy zbyt długim stringu, przepuszczenie go przez funkcję:
  1. <?php
  2. $code = preg_replace("/&lt;style(.|n)+&lt;/style&gt;/e", "", $code);
  3. ?>

Powoduje, że IE przestaje ładować stronę, a Mozilla wypisuje, ze "Dokument nie zawiera żadnych danych".

Sprawdzałem na innych serwerach (of.pl, klub.chip.pl) - działają na dłuższych stringach, ale też jest ograniczenie :-(

Raczej na pewno nie chodzi o zawartość stringu, bo aby zadziałało nie jest istotne co wytnę, tylko ile.

Jakieś ustawienia serwera musze zmienić?
Go to the top of the page
+Quote Post
FiDO
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Po co uzywasz flagi e w wyrazeniu? Usun ja.

I co to znaczy dlugi string? Ja dzisiaj robilem preg_replace_callback z troszke bardziej skomplikowanym wyrazeniem i na ok 80KB wykonywalo sie to w czasie rzedu 0.01 sekundy.


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
DEXTER_c
post
Post #3





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 8.12.2005

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


  1. <?php
  2. $code = preg_replace("/&lt;style(.|n)+&lt;/style&gt;/e", "paintCSS('0')", $code);
  3. ?>


Po to mi flaga e smile.gif Musze teraz wyjaśnić, że funkcja paintCSS() nie jest przyczyną problemu, bo forma z pierwszego postu też nie działa.

Działa mi string 10 500 znaków (dokładnej granicy nie znam, jak pisałem na of.pl i klub.chip.pl zadziała dłuższy), ja musze być pewny że 200 000 też zadziała smile.gif

Tak BTW. Już od 1,5 roku bawię się php i nigdy z takim problemem („Dokument nie zawiera żadnych danych”) się nie spotkałem. W jakich jeszcze przypadkach może on wystąpić?
Go to the top of the page
+Quote Post
Radarek
post
Post #4





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 23.05.2005

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


Daj wiecej kodu to sprawdzimy u siebie.
Go to the top of the page
+Quote Post
DEXTER_c
post
Post #5





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 8.12.2005

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


To nie jest konkretnie to, ale uproszczone, też nie działa na tej samej zasadzie.

Policzyłem też dokładną granicę, do której działa poprawnie: 3810 znaków (liczyłem oczywiście wynik funkcji oczysc()).

Aby był widoczny na forum rzeczywisty kod, musiałem zrobić odstępy pomiędzy & a #.

  1. <?php
  2. $code = '<style></style>'; // bardzo dużo 
  3.  
  4. function oczysc($code) {
  5.  
  6.  $code = str_replace('&', '&amp;', $code);
  7.  $code = str_replace("'", '& #39;', $code);
  8.  $code = str_replace("<", "&lt;", $code);
  9.  $code = str_replace(">", "&gt;", $code);
  10.  $code = str_replace('"', '&quot;', $code);
  11.  $code = str_replace('=', '& #61;', $code);
  12.  $code = str_replace(' ', '&nbsp;&nbsp;&nbsp;', $code); 
  13.  $code = str_replace('class', '& #99;& #108;& #97;& #115;& #115;', $code);
  14.  $code = str_replace('span', '& #115;& #112;& #97;& #110;', $code);
  15.  $code = str_replace('type', '& #116;& #121;& #112;& #101;', $code);
  16.  $code = str_replace('value', '& #118;& #97;& #108;& #117;& #101;', $code);
  17.  
  18.  return $code;
  19. }
  20.  
  21. $code = oczysc($code);
  22.  
  23. $code = preg_replace("/&lt;style(.|n)+&lt;/style&gt;/e", "", $code);
  24.  
  25. echo $code;
  26. ?>
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: 21.08.2025 - 23:31