Login lub e-mail Hasło   

Mniej znane opcje kontrolowania wyjścia (Output Buffering)

Odnośnik do oryginalnej publikacji: http://urzenia.net/295/output-buffering/
Mało kto wie, że funkcji z pakietu ob_* można użyć na przykład do konwersji z jednego kodowania do drugiego (np. strona de facto zapisana w ISO-8859-2 może pójść do przeg...
Wyświetlenia: 1.971 Zamieszczono 11/06/2006

Mało kto wie, że funkcji z pakietu ob_* można użyć na przykład do konwersji z jednego kodowania do drugiego (np. strona de facto zapisana w ISO-8859-2 może pójść do przeglądarki jako UTF-8), albo do automatycznej kompresji za pomocą gzip, o ile przeglądarka wspiera tą metodę.

Do zmiany strony kodowej, oprócz funkcji z pakietu ob_* potrzebujemy rozszerzenia albo iconv, albo mb. Najpierw trzeba zdefiniować, z jakiego kodowania chcemy "tłumaczyć”:

iconv_set_encoding('internal_encoding', $enc_from); //jeśli korzystamy z iconv
mb_internal_encoding($enc_from); //jeśli korzystamy z mbstring

gdzie $enc_from może być np. "ISO-8859-2″ (lista obsługiwanych kodowań na stronie PHP (dla mbstring) lub na stronie biblioteki iconv (dla iconv).

Nastepnym krokiem jest zdefiniowanie kodowania wyjściowego:

iconv_set_encoding('output_encoding', $enc_to); //dla iconv
mb_http_output($enc_to); //dla mbstring

gdzie $enc_to w naszym przykładzie to „UTF-8″.

Teraz pozostaje tylko na początku strony wstawić instrukcję uruchamiającą buforowanie wyjścia:

ob_start('ob_iconv_handler'); //w przypadku iconv
ob_start('mb_output_handler'); //gdy używamy mbstring

I już możemy się cieszyć zmienionym kodowaniem danej strony :)

Uruchomienie kompresji jest równie proste, trzeba tylko pamiętać aby był załadowany moduł zlib. Samo uruchomienie kompresji to podanie funkcji ob_start() odpowiedniego parametru:

ob_start('ob_gzhandler');

Za pomocą instrukcji ini_set() możemy ustawić także stopień kompresji:

ini_set('zlib.compresss_level', $comp_level);

gdzie $comp_level jest to liczba całkowita z zakresu od 0 do 9 (domyślnie 6).

Pozostaje jeszcze tylko jeden problem: jak połączyć razem konwersję z jednego kodowania na drugie wraz z kompresją? Proszę:

ob_start(array('ob_gzhandler', 'ob_iconv_handler'));

Ważna powyżej jest kolejność parametrów podawanych w tablicy: gdy podasz je w odwrotnej kolejności, nie będzie działać kompresja.

Podobne artykuły


16
komentarze: 5 | wyświetlenia: 8953
9
komentarze: 0 | wyświetlenia: 2740
15
komentarze: 5 | wyświetlenia: 32576
13
komentarze: 2 | wyświetlenia: 22870
10
komentarze: 2 | wyświetlenia: 8064
8
komentarze: 2 | wyświetlenia: 27344
8
komentarze: 5 | wyświetlenia: 18431
49
komentarze: 18 | wyświetlenia: 64730
11
komentarze: 7 | wyświetlenia: 14221
6
komentarze: 3 | wyświetlenia: 18448
6
komentarze: 0 | wyświetlenia: 6646
37
komentarze: 9 | wyświetlenia: 28301
7
komentarze: 1 | wyświetlenia: 3420
 
Autor
Artykuł
Dodatkowe informacje




Brak wiadomości


Dodaj swoją opinię
W trosce o jakość komentarzy wymagamy od użytkowników, aby zalogowali się przed dodaniem komentarza. Jeżeli nie posiadasz jeszcze swojego konta, zarejestruj się. To tylko chwila, a uzyskasz dostęp do dodatkowych możliwości!
 

© 2005-2018 grupa EIOBA. Wrocław, Polska