![]() |
![]() |
![]()
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: 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: 5.10.2025 - 22:42 |