Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: preg_replace()
Forum PHP.pl > Forum > Przedszkole
DEXTER_c
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ć?
FiDO
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.
DEXTER_c
  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ć?
Radarek
Daj wiecej kodu to sprawdzimy u siebie.
DEXTER_c
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. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.