Problem z kodowaniem utf-8 i iso-8859-2 w AJAX i PHP
.
Załóżmy jednak, że Twoja strona używa kodowania iso-8859-2, które definiujesz na stronie wywołującej skrypt AJAX w nastepujący sposób:
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
Następnie wywołujemy AJAX
var parametr;
http.open("GET", "plik.php?param="+parametr, true);
W pliku plik.php należy wstawić nagłówek identyczny jak w twoim pliku wywołującym AJAX, zatem:
header('Content-Type: text/html; charset=iso-8859-2');
Jak zauważyłeś polskie ogonki dalej nie działają, dlaczego?
Kodowanie jest jak najbardziej poprawne, problem to sposób przekazania polskich znaków do skryptu plik.php, aby to naprawić posłużymy się poniższa funkcją umieszczając ją przed przesłaniem nagłówla HEADER z kodowaniem w pliku plik.php
function charset_utf_fix($string)
{
$utf_iso = array(
"\xc4\x85" => "\xb1",
"\xc4\x84" => "\xa1",
"\xc4\x87" => "\xe6",
"\xc4\x86" => "\xc6",
"\xc4\x99" => "\xea",
"\xc4\x98" => "\xca",
"\xc5\x82" => "\xb3",
"\xc5\x81" => "\xa3",
"\xc3\xb3" => "\xf3",
"\xc3\x93" => "\xd3",
"\xc5\x9b" => "\xb6",
"\xc5\x9a" => "\xa6",
"\xc5\xba" => "\xbc",
"\xc5\xb9" => "\xac",
"\xc5\xbc" => "\xbf",
"\xc5\xbb" => "\xaf",
"\xc5\x84" => "\xf1",
"\xc5\x83" => "\xd1",
// xmlhttprequest uses different encoding
"%u0104" => "\xA1",
"%u0106" => "\xC6",
"%u0118" => "\xCA",
"%u0141" => "\xA3",
"%u0143" => "\xD1",
"%u00D3" => "\xD3",
"%u015A" => "\xA6",
"%u0179" => "\xAC",
"%u017B" => "\xAF",
"%u0105" => "\xB1",
"%u0107" => "\xE6",
"%u0119" => "\xEA",
"%u0142" => "\xB3",
"%u0144" => "\xF1",
"%u00D4" => "\xF3",
"%u015B" => "\xB6",
"%u017A" => "\xBC",
"%u017C" => "\xBF"
);
return str_replace(array_keys($utf_iso), array_values($utf_iso), $string);
}
$_GET['param']=charset_utf_fix($_GET['param']);
Wyświetl teraz tekst przekazany metodą GET i zobaczysz, że polskie znaczki pokazują się poprawnie!
Data: cze 22, 2006