Lis
11
2013
11
2013
Ajax (JavaScript) + UTF8 i polskie znaki diakrytyczne
W trakcie przesyłania danych przy pomocy Ajax spotkałem się z problemem kodowania polskich liter w UTF8. Poniżej przedstawiam trzy rozwiązania jak sobie z tym poradzić.
Objawy błędnego kodowania
- Krzaki.
- Zapis w Unicode, np. Litera Ń – %u0143
- Znaki zapytania.
- Komunikat w konsoli błędów uncaught exception: INVALID_CHARACTER_ERR: DOM Exception 5.
Rozwiązanie
- Krzaki.
Najprostsze rozwiązanie :) Należy zdefiniować kodowanie w nagłówku strony, lecz rezultaty są różne.
1<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - Polskie litery przesyłane są jako znaki Unicode.
W skrypcie PHP przefiltruj dane przychodzące przesyłane metodą POST lub GET przez funkcję:1234567891011121314151617181920212223242526function charset_utf_fix($string) {$utf = array("%u0104" => "Ą","%u0106" => "Ć","%u0118" => "Ę","%u0141" => "Ł","%u0143" => "Ń","%u00D3" => "Ó","%u015A" => "Ś","%u0179" => "Ź","%u017B" => "Ż","%u0105" => "ą","%u0107" => "ć","%u0119" => "ę","%u0142" => "ł","%u0144" => "ń","%u00F3" => "ó","%u015B" => "ś","%u017A" => "ź","%u017C" => "ż");return str_replace(array_keys($utf), array_values($utf), $string);} - Wybrane litery zamieniane są na znaki zapytania lub w konsoli błędów pojawia się komunikat uncaught exception: INVALID_CHARACTER_ERR: DOM Exception 5.
Poprawnie zakoduj znaki po stronie JavaScript jeszcze przed ich wysłaniem przy pomocy funkcji:123function encodeRFC5987ValueChars (str) {return encodeURIComponent(str).replace(/['()]/g, escape).replace(/\*/g, '%2A').replace(/%(?:7C|60|5E)/g, unescape);}
Podobne tematy
8 komentarzy + Dodaj komentarz
Dodaj komentarz do Piotr
O mnie
Najnowsze wpisy
- Drzewo kategorii – budowa struktury od dołu do góry
- PHPExcel – export + import pliku XLS
- WordPress + Polylang – Tworzenie klasy CSS z ID strony/wpisu w wybranym języku
- Mailing – Poprawna konstrukcja szablonu maila HTML/CSS i prawidłowy wygląd w programie pocztowym
- Szukasz programisty PHP dla e-commerce?
Dzięki Arkadiuszu za ten poradnik :)
Niestety, jak na innych stronach pisze, żeby zmienić kodowanie na UTF-8,
ale to w moim przypadku nic to nie dało. Więc jedyne wyjście to dodanie polskich
znaków do skryptu.
Do tej pory nie znam przyczyny dlaczego samo zdefiniowanie kodowania w tagu META w HTML / w PHP przy użyciu funkcji header(), nie wystarcza.
Wpis ma juz swoje lata ale moze sie przyda komus odpowiedz.
To stary blad „nawracajacy” od wersji do wersji w niektorych przegladarkach.
Sprawdz zanim stracisz mnostwo czasu i nerwow.
Oprocz zapisania plikow jako UTF-8 trzeba wyslac przed sama strona naglowek HTTP:
Content-Type:text/html; charset=UTF-8
i wtedy w meta moze ale nawet nie musi byc ustawione kodowanie.
i tak bedzie utf-8.
Pozdrawiam
sjd
Z tego co wyczytałem, to JavaScript domyślnie wszelkie stringi koduje w UTF-16, czyli na 16 bajtach, a nie na 8, jak to powinno być. Więc dodanie META do strony nic nie da.
Skoro dodanie META do strony nic nie daje, to co mogło by pomóc rozwiązać ten problem z kodowaniem 16bit JavyScript?
Temat już chyba nieaktualny? :D
Raczej nie aktualny, ale samo to jak fajnie opisane to było i w jaki sposób blog jest prowadzony zasługuje na szacunek i uznanie nie sądzisz?
Zgadzam się z Magdą – tyle wiedzy i artykułow, które jest dostepne tutaj to chyba nie znajdziesz na zadnej innej stronie ;)