Jak zmienić kodowanie tekstu nie mając dostępu do funkcji iconv
Adamo
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 :)
Dzięki CI! :)