Ajax i kodowanie polskich znaków

Tzw wywołania ajaxowe, wysyłają dane do serwera z kodowaniem UTF-8. Taka natura i nic tu się nie zrobi.
Jeżeli strona ma inne kodowanie niż UTF-8, najprościej:
1. w pliku php, który jest wywoływany ajaxowo, umieszczamy informację dla przeglądarki, że ma interpretować przychodzące znaki jako np ‘windows-1250:
header('Content-Type: text/html; charset=windows-1250');
2. Przychodzące dane POST lub GET) trzeba skonwertować z UTF-8 na windows-1250. można trenować z iconv(‘utf-8′, ‘windows-1250′, …) lub użyć funkcji własnej:

function prepareAjaxGPC()
{
$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",
"%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"
);
foreach ($_REQUEST as $key => $val) {
$_REQUEST[$key] = str_replace(array_keys($utf_iso), array_values($utf_iso), $val);
}
}

Oczywiście, jeżeli przesyłana jest tablica, potrzebne będzie zmodyfikowanie funkcji na jej wywołanie rekurencyjne itp.

Tagi: ,

Dodaj komentarz

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Zmień )

Twitter picture

You are commenting using your Twitter account. Log Out / Zmień )

Facebook photo

You are commenting using your Facebook account. Log Out / Zmień )

Connecting to %s


Follow

Otrzymuj każdy nowy wpis na swoją skrzynkę e-mail.