Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Czyszczenie kodu html
Forum PHP.pl > Forum > Przedszkole
piotr485
Witam.

Mam zmieną $index a w niej całą zawartość strony

$index = '
<html>

<head>
<title>tytuł</title>
</head>

<body>
<div>tekst na stronie</div>
</body>

</html>
';

chciałbym usunąć spacje które są po za obszarami <>

czyli chciałbym uzyskać taki efekt

$index = '<html><head><title>tytuł</title></head><body><div>tekst na stronie</div></body></html>';

czy jest do tego jakaś gotowa funkcja w php ?

Z góry dziękuję za pomoc
Lord
http://php.net/manual/en/function.str-replace.php
  1. // Order of replacement
  2. $str = "Line 1\nLine 2\rLine 3\r\nLine 4\n";
  3. $order = array("\r\n", "\n", "\r");
  4. $replace = '';
  5.  
  6. // Processes \r\n's first so they aren't converted twice.
  7. $newstr = str_replace($order, $replace, $str);
  8.  
piotr485
prawie działa z tym, że zostają spacje:

  1. <!DOCTYPE html><html lang="pl"> <head>


i z przodu zmiennej też jest kilka lini przerwy i po znakach również - funkcja trim niestety ich nie czyści, ktoś ma jakiś pomysł ?
trueblue
  1. preg_replace('/^\s+|\n|\r|\s+$/','',$index);
LowiczakPL
Kod
function czysc_html($html) {
    $search = array('/\>[^\S ]+/s', '/[^\S ]+\</s', '/(\s)+/s');
    $replace = array('>','<','\\1');
    $html = preg_replace($search, $replace, $html);
    return $html;
}
piotr485
hmmm dziwne bo nadal zostają szpary


  1.  
  2.  
  3.  
  4.  
  5. <!DOCTYPE html><html lang="pl"> <head> <title>Tytuł strony</title> <meta charset="UTF-8">


nie mówiąc o tej przerwie początkowej na 5 lini
LowiczakPL
a teraz

  1. function kompresuj_html($html) {
  2. $search = array('/\>[^\S ]+/s', '/[^\S ]+\</s', '/(\s)+/s');
  3. $replace = array('>','<','\\1');
  4. $html = preg_replace($search, $replace, $html);
  5. $html = str_replace('> <', '><', $html);
  6. return $html;
  7. }
piotr485
jo teraz super tylko żeby usunąć jeszcze te wiersze początkowe i końcowe ...
com
prościej było zapisać ten kod jak należy wink.gif
LowiczakPL
  1. function kompresuj_html($html) {
  2. $search = array('/\>[^\S ]+/s', '/[^\S ]+\</s', '/(\s)+/s');
  3. $replace = array('>','<','\\1');
  4. $html = preg_replace($search, $replace, $html);
  5. $html = str_replace('> <', '><', $html);
  6. $html = ltrim($html);
  7. $html = rtrim($html);
  8. return $html;
  9. }
piotr485
o idealnie teraz z tym, że spacje i nowe linie z przodu <html i tyłu </html> się nie usuneły - dziwna sprawa
Crozin
1. Zdajesz sobie sprawę, że wynikowy dokument HTML będzie różnił się (strukturalnie, nie w zapisie) od oryginału? A to będzie miało spory wpływ na np. wygląd strony.
2. Jeżeli robisz to w celu zmniejszenia wielkości dokumentu - wykorzystaj kompresję, np. GZIP.
piotr485
Cytat(Crozin @ 19.06.2016, 02:16:06 ) *
1. Zdajesz sobie sprawę, że wynikowy dokument HTML będzie różnił się (strukturalnie, nie w zapisie) od oryginału? A to będzie miało spory wpływ na np. wygląd strony.
2. Jeżeli robisz to w celu zmniejszenia wielkości dokumentu - wykorzystaj kompresję, np. GZIP.


1. Nie rozumiem tego stwierdzenia - usuwają się tylko niepotrzebne spacje więc strona ma taki sam wygląd.
2. Zamiast robić echo to trzymam całą stronę w zmiennej i potem traktuje ją tą funkcją w celu optymalizacji - dokładnie tak - więc nie wiem po co by do tego wykorzystywać jakąś bibliotekę? tongue.gif
viking
Jeśli np usuniesz spacje pomiędzy elementami listy inline znikną odstępy.
Kompresję zazwyczaj ustawia się na poziomie konfiguracji serwera.
LowiczakPL
Ja z automatu kompresuję wynikowy kod HTML i nie zauważyłem aby kiedykolwiek miało to jakikolwiek wpływ na wygląd strony.

Dodatkowo mam włączoną kompresję, plus expires plików.
viking
  1. $html = '<p><span>testowy</span> <a href="#">link</a></p>';
  2. echo $html;
  3. echo kompresuj_html($html);


Gdzie kompresuj_html to post #10
Crozin
@piotr485: http://www.oracle.com/technetwork/articles...ace-092897.html - dotyczy XML-a, ale HTML jest pod tym względem podobny. Dołącz do tego kwestie takie jak wyświetlanie bądź nie odstępów pomiędzy elementami liniowymi czy interpretowanie białych znaków przez CSS-owe właściwości typu white-space. Poza tym porównaj sobie wielkość skompresowanego GZIP-em (Google: Apache/Nginx/dowolny-serwer html gzip compression) "zaśmieconego" i ręcznie "oczyszczonego" HTML-a - zapewne różnice będą skrajnie małe. Na koniec: jeżeli już tak bardzo by Ci zależało na takim wyglądzie finalnego dokumentu zastanów się nad wykorzystaniem jakiegoś systemu szablonów operujących na XML-u. Weź pod uwagę fakt, że poniższy kod jest poprawnym HTML5 a wszystkie "optymalizatory" bazujące na wyrażeniach regularnych zmodyfikują Ci błędnie zawartość atrybutu title:
  1. <img src="image.png" title="some > image < xxx" alt="xx">
LowiczakPL
<img src="image.png" title="some > image < xxx" alt="xx">

Moje eregi zostawiają Twój przykład w stanie nienaruszonym wink.gif

---------------------------
Tu akurat się rozpędziłem i przegiąłem w linii 5, która jest do wywalenia bo ona popsuje niestety strony.

Cytat(viking @ 19.06.2016, 11:47:35 ) *
  1. $html = '<p><span>testowy</span> <a href="#">link</a></p>';
  2. echo $html;
  3. echo kompresuj_html($html);


Gdzie kompresuj_html to post #10
com
Już Ci napisałem, zapisuj to poprawnie i nie kombinuj, bo więcej kosztuje Cie prze-renderowanie tego niż uzycie sugerowanego gzipa albo zapisanie to bez zbędnych białych znaków, dodatkowo od czegoś jest heredoc/nowdoc wink.gif
Pyton_000
Testuj sobie.... http://stackoverflow.com/questions/6225351...age-html-output
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.