Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wykrywanie kodowania
Forum PHP.pl > Forum > PHP
snapshot
Mam skrypt, do obsługi formularza, który przyjmuje dane z różnych formularzy, na różnych stronach. Różne jest także kodowanie. I tu zaczyna się problem. Wyświetlać chcę wszystko w utf-8, ale jest problem z przekonwertowaniem. Teoretycznie powinna zadziałać funkcja mb_detect_encoding + iconv, ale mb_detect_encoding ma problem z windows-1250. W sumie nawet iso nie udało mi się wykryć. Częściowo można problem ominąć dodając do formularza accept-charset="utf-8", ale ie to olewa. Przeczytałem już całą sieć, niby wszyscy piszą, że się da, ale nigdzie nie ma podanego przykładu wykrywania.
Luciano
Troszke niejasno napisałeś. Nie musisz wcale wykrywać kodowania. Jeśli twój HTML jest zapisany w UTF-8 (fizycznie), w meta tagach podajesz UTF-8 i baza danych ustawiona jest również na UTF8 nie interesuje Cie nic więcej. Dane wporwadzane, przez użytkowników będa konwertowane do UTF-8 automagicznie i wszystko będzie poprawnie wyświetlone.
snapshot
Ale o to chodzi właśnie, że HTML, będzie miał różne kodowanie, nie zależne odemnie, sam php, który to przerobi ma utf-8. Zatem mogę dostawać dane w uft-8, w windows-1250, czy iso-8859-2, chodzi o to by to rozpoznać a potem zamienić funkcją iconv na utf-8. Pewnie można by użyć http://www.ogonki.agh.edu.pl/plchars.html, ale nie wiem jak się zabrać za to
paziek
to jest akurat mój skrypt z JS, ale idea jest ta sama, sobie przerób na PHP i tyle.

Kod
try{//to się uda tylko, jeśli plik jest w utf-8.
    uniConv.charset = 'utf-8';
    return uniConv.ConvertToUnicode(rawdata);//zwracamy dane, nie ma sensu dalej lecieć
} catch(e) {//inaczej napewno nie jest to utf-8 i sprawdzamy czy jest to iso, czy windowsowski syf
    if(/[±¦¶¬¼]/.test(rawdata)) charset='iso-8859-2';//jeśli są krzaczki typowe dla iso-8859-2
    else {//trzeba sprawdzić, czy napewno nie jest to iso - sprawdzamy, duże Ą pod kątem kodowania windows-1250
        if(/[¥¹]/.test(rawdata)) charset='windows-1250';//jeśli Ą jest pod postacią windows-1250
        else charset='iso-8859-2';//można przekonwertować na iso
    }
}


Sobie sprawdź jak wyglądają polskie znaki zakodowane pod różnymi kodowaniami oraz wyświetlane pod jeszcze innymi.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.