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.