Programowanie w języku PHP » FAQ

Jak zmienić kodowanie tekstu nie mając dostępu do funkcji iconv

  • 2009-06-10 06:09
  • 1 komentarz
  • 4189 odsłon
  • Oceń ten tekst jako pierwszy
Czasami jest potrzeba zmiany kodowania tekstu a funkcja iconv() która na to pozwala jest niedostępna i nie mamy możliwości jej zainstalowania.
W takim przypadku można zrobić własną funkcję z tabelą znaków które zmieniąją się w poszczególnych kodowaniach. Gotowe funkcje przedstawiam poniżej (będzie obsługiwało zamianę kodowań ISO-8859-2, WINDOWS-1250 oraz UTF-8 czyli najpopularniejsze w polsce kodowania):

<?php
  function win2utf(){
   $tabela = Array(
  $tabela = Array(
    "\xb9" => "\xc4\x85", "\xa5" => "\xc4\x84", "\xe6" => "\xc4\x87", "\xc6" => "\xc4\x86",
    "\xea" => "\xc4\x99", "\xca" => "\xc4\x98", "\xb3" => "\xc5\x82", "\xa3" => "\xc5\x81",
    "\xf3" => "\xc3\xb3", "\xd3" => "\xc3\x93", "\x9c" => "\xc5\x9b", "\x8c" => "\xc5\x9a",
    "\x9f" => "\xc5\xba", "\xaf" => "\xc5\xbb", "\xbf" => "\xc5\xbc", "\xac" => "\xc5\xb9",
    "\xf1" => "\xc5\x84", "\xd1" => "\xc5\x83", "\x8f" => "\xc5\xb9");
   return $tabela;
  }
 
  function iso2utf(){
   $tabela = Array(
    "\xb1" => "\xc4\x85", "\xa1" => "\xc4\x84", "\xe6" => "\xc4\x87", "\xc6" => "\xc4\x86",
    "\xea" => "\xc4\x99", "\xca" => "\xc4\x98", "\xb3" => "\xc5\x82", "\xa3" => "\xc5\x81",
    "\xf3" => "\xc3\xb3", "\xd3" => "\xc3\x93", "\xb6" => "\xc5\x9b", "\xa6" => "\xc5\x9a",
    "\xbc" => "\xc5\xbc", "\xac" => "\xc5\xbb", "\xbf" => "\xc5\xba", "\xaf" => "\xc5\xb9",
    "\xf1" => "\xc5\x84", "\xd1" => "\xc5\x83");
   return $tabela;
  }
 
  function ISO88592_2_UTF8($tekst){
   return strtr($tekst, iso2utf());
  }
 
  function UTF8_2_ISO88592($tekst){
   return strtr($tekst, array_flip(iso2utf()));
  }
 
  function WIN1250_2_UTF8($tekst){
   return strtr($tekst, win2utf());
  }
 
  function UTF8_2_WIN1250($tekst){
   return strtr($tekst, array_flip(win2utf()));
  }
 
  function ISO88592_2_WIN1250($tekst){
   return strtr($tekst, "\xa1\xa6\xac\xb1\xb6\xbc", "\xa5\x8c\x8f\xb9\x9c\x9f");
  }
 
  function WIN1250_2_ISO88592($tekst){
   return strtr($tekst, "\xa5\x8c\x8f\xb9\x9c\x9f", "\xa1\xa6\xac\xb1\xb6\xbc");
 
  }
?>


Aby zmienić teraz kodowanie przykładowo z WINDOWS-1250 na ISO-8859-2 lub z ISO-8859-2 na UTF-8 wystarczy wywołać funkcję:

<?php
  echo WIN1250_2_ISO88592('ten tekst będzie skonwertowany: ą ź Ą ś ł'); // Windows-1250 na ISO-8859-2
 
  echo '<br>'.ISO88592_2_UTF8('ten tekst będzie skonwertowany: ą ć ż Ą Ę Ó Ł Ż Ź ó ł ń Ń'); // ISO-8859-2 na UTF-8
 
?>


Aby skonwertować z UTF-8 na ISO-8859-1 można skorzystać z funkcji "utf8_decode" a z ISO-8859-1 na UTF-8 z funkcji "utf8_encode"

Ostatnio przydało mi się to bardzo i mam nadzieję że przyda się to jeszcze komuś więc to tu zamieszczam :)

1 komentarz