![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 18.07.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam serdecznie.
W zmiennej $dane mam opis, który jest pobierany z pliku tekstowego. Plik tekstowy ma kodowanie ISO-8559-2 lub Windows-1250. Chcę sprawdzić kodowanie ponieważ za pomocą iconv konwertuję zawartość do UTF-8. Szukałem w sieci (również na forum) i nie znalazłem niczego co by zadziałało. Ostatnie rozwiązanie, które sprawdzałem i które niby działa:
Niestety echo nie zwraca żadnej wartości (nie wykrywa kodowania zmiennej), ktoś wie jak to ugryźć? Ten post edytował Masterson 1.08.2011, 11:08:05 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
A jaki jest wynik, kiedy dajesz ostatni parametr false, lub wywołujesz bez ostatego parametru?
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 18.07.2011 Ostrzeżenie: (0%) ![]() ![]() |
Niestety bez zmian. Okazuje się, że ta funkcja akurat nie do końca działa z ISO-8859-2 i Windows-1250.
Problem polega na tym, że w zależności od kodowania pliku ($dane) chcę użyć innego parametru dla iconv Pliki, z których wyciągam dane to pliki txt, które mogą wystąpić w 2 kodowaniach (Windows-1250 lub ISO-8859-2). Znacie może inny, skuteczny sposób na sprawdzenie kodowania? Próbowałem również przez preg_match, ale bezskutecznie (przykład z http://php.net/manual/en/function.mb-detect-encoding.php). Pozdrawiam |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Trochę mnie dziwi, że funkcja mb_detect_encoding() nie działa. Alternatywnym sposobem może być funkcja opisana na mynthon.net.
Sprawdź jeszcze czym jest zmienna $encoding:
Może funkcja działa, tylko po prostu nie rozpoznaje kodowania, co mogłoby oznaczać, że kodowanie jest inne, niż byśmy oczekiwali. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jest jeszcze inny, banalniejszy sposób. Po prostu przeszukaj string na obecność znaków, przy których te kodowania się różnią. Jeżeli np. znajdziesz 'ś' w kodowaniu ISO, to właśnie takie jest kodowanie. W przeciwnym wypadku kodowanie to Windows-1250. Dla zwiększenia szansy poprawnego rozpoznania obsłuż wszystkie istotne znaki: (wielkie i małe litery ą,ś,ź)
niemniej, oczywiście dużo wygodniejsze byłoby użycie mb_detect_encoding... Ten post edytował l0ud 1.08.2011, 13:28:45 -------------------- XMPP: l0ud@chrome.pl
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 18.07.2011 Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem tak:
Nie jest to na pewno profesjonalne rozwiązanie, ale działa poprawnie. Użyłem strtr ponieważ nie wiem jak inaczej można sprawdzić obecność danego znaku ASCII w zmiennej. Próbowałem preg_match i strpos i nie wykrywało mi znaku 'chr(185)' (pewnie popełniam błąd w składni) stąd tak na około, najpierw zamiana znaku na konkretny string i uzależnienie kodowania od owego stringu (litera ą i kilka innych mają inny nr w ASCII dla ISO i Windows). Jak ktoś wie jak powinienem to zrobić aby było "poprawniejsze" to proszę o sugestie ![]() Ten post edytował Masterson 1.08.2011, 17:43:48 |
|
|
--ja-- |
![]()
Post
#7
|
Goście ![]() |
Mozna pominąć pierwszy parametr i php sam sobie dopasuje
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 22.05.2025 - 03:40 |