![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 4.05.2015 Ostrzeżenie: (0%) ![]() ![]() |
Witam.Mam problem z pewnym zadaniem. Treść jego jet następująca:
Napisz aplikację konwertującą ze standardu Windows-1250 do standardu ISO-8850-2. Aplikacja powinna wczytywać plik w formacie Windows 1250 i zapisywać plik skonwertowany z rozszerzeniem "ISO". Napisałem formularz na wczytanie pliku na serwer, który wygląda tak: Nie wiem jak otworzyć i skonwertować plik, który jest wczytany na serwerze. Proszę o pomoc. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Wgranie pliku na serwer: https://www.google.pl/webhp?sourceid=chrome...20file%20upload
2. Wczytanie zawartości pliku: file_get_contents 3. Rozpoznanie i zmiana kodowania znaków: mb_detect_encoding, mb_convert_encoding 4. Zapisanie pliku na dysku: file_put_contents 5. Ewentualne pobranie przez przeglądarkę pliku: https://www.google.pl/webhp?sourceid=chrome...file%20download |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 4.05.2015 Ostrzeżenie: (0%) ![]() ![]() |
Potrzebuję pomocy z tym programem. Kiedy próbuję konwertować plik wyskakuje mi taki komunikat :Warning: mb_convert_encoding() [function.mb-convert-encoding]: Unknown encoding "Windows-1250" in D:\Program Files (x86)\WebServ\httpd\index.php on line 29.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 139 Pomógł: 24 Dołączył: 12.05.2013 Skąd: Hamburg Ostrzeżenie: (0%) ![]() ![]() |
Crozin troszkę wprowadził cię w błąd: http://php.net/manual/de/mbstring.supported-encodings.php
Funkcje "mb_" nie obsługują Windows-1250. Nie będziesz w stanie wykryć różnicy pomiędzy ISO-8859-2 a Windows-1250. Musisz zaufać, że źródło jest w Windows-1250 i użyć http://php.net/manual/en/function.iconv.php do zmiany kodowania. Mógłbyś napisać własną porównywarkę kodowania, ale ona nigdy nie będzie w 100% skuteczna. Niestety Windows-1250 sucks. Edit: Kodowanie Windows-1250 nazywa się CP1250. Ten post edytował Xelah 18.05.2015, 10:38:53 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 4.05.2015 Ostrzeżenie: (0%) ![]() ![]() |
A jak mam napisac taką porównywarkę, bo chcę, żeby wywalało błąd kiedy wczytam pliki w kodowaniu innym niż Windows 1250?
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 139 Pomógł: 24 Dołączył: 12.05.2013 Skąd: Hamburg Ostrzeżenie: (0%) ![]() ![]() |
Jak już napisałem wcześniej, nie jesteś w stanie powiedzieć, czy dane kodowanie to Windows-1250. Możesz się pobawić w następujący sposób:
1. mb_detect_encoding ze strict ustawionym na true w celu sprawdzenia, czy to jest kodowanie, które mb obsługuje. 2. Jeśli nie to sprawdzasz, czy zadany string zawiera znaki z przedziału 0x00-0x1F lub 0x7F-0x9F. Jeśli tak, to na pewno nie jest ISO, bo layout-y ISO nie mają pod tymi kodami znaków. Teraz możesz, z dosyć dużym prawdopodobieństwem, powiedzieć, że to może być CP1250. A czy jest? Tego się nie dowiesz, bo inne kodowania z CP mają znaki z tego same zakresu (nie wszystkie ale to musiałbyś znowu porównywać wsztkie code page layout-y i dalej nie będziesz miał 100% pewności). To jest tylko brzydki workaround, który na pewno nie rozwiąże problemu. Niestety albo wymusisz na userze, żeby nie ładował niczego w innego niż UTF-8 albo skończysz z rozkwaszonymi znakami tu i ówdzie :/ Ten post edytował Xelah 20.05.2015, 07:16:32 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 2.08.2025 - 12:18 |