![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 21.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Moja aplikacja bazuje na UTF-8. Baza danych w UTF-8, wszystkie pliki językowe w UTF-8. Wszystko jest pięknie i ślicznie. Zero problemów z polskimi znakami. Jednakże, pojawiła się konieczność eksportu niektórych danych do XML, który musi mieć encoding w ISO-8859-2. Do tego celu wybrałem DomDocument, ponieważ na pierwszy rzut oka dobrze radził on sobie z konwersją no i zachowuje zasady obiektowości. Niestety plik XML został odrzucony przez importującego dane. Podany powód: zbyt duża ilość znaków w jednym z tagów. Zliczając znaki ich ilość była zgodna z dokumentacją, dlatego dobrałem się HexEditorem do wyeksportowanego pliku. Okazało się, że polskie znaki zapisywane są na dwóch bajtach i wyglądają, jak te z UTF-8. Próbowałem ręcznie konwertować plik XML zwrócony jako string (metodą DomDocument::saveXML()) metodą mb_convert_encoding, ale w wyniku otrzymuję (niezależnie od podanego kodowania w parametrze tej funkcji) string kodowany w ASCII, czyli bez polskich znaków. Pytanie: Jak poprawnie zwrócić plik XML posiadający jeden bajt na polski znak, poprawnie zakodowany w ISO-8859-2? PS. Ustawiam nagłówek XML i kodowanie: Z góry dziękuję za pomoc! |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Ja do konwersji uzywam http://pl2.php.net/manual/en/function.iconv.php
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 21.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jak już napisałem, te metody nie dziełają (mb_convert_encoding oraz iconv).
Próbowałem ręcznie konwertować plik XML zwrócony jako string (metodą DomDocument::saveXML()) metodą mb_convert_encoding, ale w wyniku otrzymuję (niezależnie od podanego kodowania w parametrze tej funkcji) string kodowany w ASCII, czyli bez polskich znaków. |
|
|
![]()
Post
#5
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Jak już napisałem Pisales tylko o jednej (IMG:style_emoticons/default/smile.gif) Mi tam iconv zawsze dzialalo. Moze źle cos robisz. Pokaz lepiej caly kod |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 21.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
iconv się wysypuje (prawdopodobnie dlatego, że ten string jakoś jest już magicznie przekonwertowany (IMG:style_emoticons/default/winksmiley.jpg) )
Kod:
Bład przy iconv: Nieobsługiwany PHP Error: iconv() function.iconv: Detected an illegal character in input string w pliku application/controllers/export.php w lini 169 Ten post edytował spyro 11.01.2011, 15:36:37 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
mało próbujesz, mało kodu pokazujesz itd... pokazujesz kod, piszesz o iconv oraz mb_... a w kodzie nic nie ma... symbole możesz także pozamieniać na encje np. albo za pomocą wskazanego mb_convert_encoding albo np. za pomocą mb_encode_numericentity - nie podałeś w zasadzie nawet kodu konwersji tylko metodę w której wysyłasz nagłówki wymuszające download oraz zwracasz wartość tego xml'a...
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 21.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Oj, był ten kawałek kodu. Zjadło go podczas edycji postu. Jakieś dziwne krzaki się pokazują zamiast kodu i nie można zapisywać posta, dlatego musiałem dodać na nowo cały kod. Zapomniałem o najważlniejszym:
Podsumowując: 1. Buduję DomDocument ustawiając kodowanie i wersję:
2. Tworzę węzły wg danych pobranych z bazy (baza w UTF-8). 3. Renderuję plik XML na ekran, wysyłając przy tym odpowiednie nagłówki. 4. Zwrócony dokument w postaci string próbuję przekonwertować za pomocą iconv lub mb_convert_encoding. Jednakże, mb_convert_encoding usuwa polskie znaki i string zawiera tylko znaki ASCII. Iconv zaś powiadamia mnie błędem, że napotkał na nieznany znak. Ten post edytował spyro 11.01.2011, 16:40:42 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 17:05 |