lis
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

  1. Krzaki.
    Najprostsze rozwiązanie :) Należy zdefiniować kodowanie w nagłówku strony, lecz rezultaty są różne.
  2. Polskie litery przesyłane są jako znaki Unicode.
    W skrypcie PHP przefiltruj dane przychodzące przesyłane metodą POST lub GET przez funkcję:

  3. 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:

Podobne tematy

Autor wpisu: Arkadiusz Krakiewicz

Programista i właściciel sklepu jednocześnie, dzięki temu rozumie potrzeby osób prowadzących sprzedaż w internecie. Od 2006 związany z eCommerce. Zaczynał jako freelancer tworząc sklepy oraz strony www. Aktualnie zajmuje się: programowanie w PHP, Symfony 2, Android, PrestaShop, osCommerce, OpenCart, WordPress.

5 komentarzy + Dodaj komentarz

  • 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?

Dodaj komentarz

Anti-Spam

O mnie

Arkadiusz Krakiewicz
Programista aplikacji webowych dla branży eCommerce. Jednocześnie jako właściciel sklepu zna od "podszewki" potrzeby osób prowadzących sprzedaż w internecie.
W swoich rozwiązaniach stawia na funkcjonalność i wydajność aplikacji pod kątem obsługi klienta.
[X]
Strona korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików cookies.
Możesz określić warunki przechowywania lub dostępu do plików cookies w Twojej przeglądarce.
Więcej w Tips & Tricks
git
TortoiseGit + Bitbucket – Tworzenie repozytorium i pierwszy commit

Zamieszczam opis jak utworzyć lokalne repozytorium i puścić pierwszy commit wraz ze zmianą nazwy brancha. Instalację Gita oraz wszelkie czynności...

Zamknij