![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 42 Pomógł: 0 Dołączył: 8.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
Mam plik xml o nastpujcej postaci:
Wyciągam z niego informację zawartą w <b></b> za pomoca php5:
Z tym ze zamiast dostać to co chcę dostaje jakieś krzaki, zamiast polskich znaków. Wiem ze problem tkwi w standardzie kodowania. Wszystko robie pod windowsem, pliki xml w edytorze xmlspy. W przeglądarce, bez przetworzenia przez php są ok, tzn są polskie znaki. Może ktoś wie dlaczego tak się dzieje? ---------------------------------------------------------------------------------------------- Problem rozwiązał się sam. Chodziło o błedne kodowanie przez edytor, po zamianie na utf-8 juz działa Ten post edytował slawa 22.02.2006, 17:48:44 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 487 Pomógł: 7 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
getElementsByTagName ma niewiele wspólnego z XPath - chyba, że DOM wywołuje pod machą jakieś zapytanie w XPath. Odpowiednikiem getElementsByTagName(tag-name) jest zapytanie //tag-name
-------------------- Łukasz Dywicki
Independent Java and open source software consultant. Blog - Java, OSGi, integracja oprogramowania.. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
witam,
pisze tutaj bo szkoda zakładać nowego tematu :-P mam prawie taki sam problem. Sa sobie 3 pliki: jeden plik xml, drugi plik php i trzeci tez plik php :-) w pierwszym xml-u mam newsy z polskimi znakami kodowanie ustawilem na iso. w drugim pliku mam clase xml_news w ktorej mam wczytanie danych przez simplexml do tablicy i wyswietleniem w osobnej funkcji przez echo. w trzecim pliku natomiast jest strona głowna w ktorej includuje sobie plik drugi i wywoluje metode wyswietlajaca mi dane pobrane z pliku. Kodowanie ustwiam tylko w pliku trzecim na iso, no i oczywiscie na encoding='iso-8859-2' w pliku xmla. Wie ktos czemu to moze nie działać?? Nie działać = wyswietlać rozne krzaczki ciekawe, w kazdym razie nie pokazuje tego co powinno. Pozdrawiam, Alk -------------------- I amar prestar aen
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 1.05.2006 Skąd: Leżajsk\Kraków Ostrzeżenie: (0%) ![]() ![]() |
Witam do Alkagar
mialem ten sam problem sproboj ustawic kodowanie w php przez wysłanie odpowedniego Headera
powinno pomoc mialem podobny problem na jednym z zagranicznych serwerów natomiast jezeli chodzi o problem slawa to... albo to samo co wyżyej (sprobój) albo zapisales plik w formacie innym niz podany w encoding w XML pozdrawiam -------------------- Errare humanum est
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Miałem to tylko, że to nie działa
![]() Ale udało mi się to rowziązać w inny sposób : - D. problem tkwił w zmianie kodowania przy zapisie pliku (chyba ![]() Link do rozwiązania bardziej od strony php Temat: System plikow Pozdrawiam, Alk -------------------- I amar prestar aen
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
Też miałem ten problem, znalazłem na to takie na około rozwiązanie. Ogólnie mam wrażenie, że jest to błąd php.. ale nie mam pewności może to jest prawidłowe zachowanie. Do czego doszedłem:
Jak ładujesz poprzez DOMDocument->load() plik w innym kodowaniu niż utf-8 (oczywiście z nagłówkiem informującym o tym kodowaniu) DOMDocument ładuje ten plik prawidłowo, odczytuje kodowanie.. można to sprawdzić poprzez DOMDocument->saveXML() php wypluwa dokument w tym kodowaniu w jakim je dostał, żadnych krzaków nie ma. Jednak jeśli spróbujemy wyciągnąć z tego dokumentu zawartość, którejkolwiek gałęzi albo zrobimy DOMDocument->saveXML(node) gdzie node jest którąś z gałęzi dokumentu.. php wypluje już nam dane przyjmując, że dokument jest w kodowaniu utf-8.. czyli zamiast polskich znaków przesłanych w iso pojawią się krzaki. Jedyny sposób na to jaki znalazłem to rekonwertowanie zwróconego ciągu znaku spowrotem na iso. Do końca nie jest dla mnie jasne czemu ale to zadziałało.. przykładowo:
Po tym zabiegu wywołanie $node->nodeValue zwraca już dane tak jak tego oczekujemy. Ja na ten problem natrafiłem eksperymentując z innymi kodowaniami. Generalnie chociażby ze względu na powyższe uważam, że lepiej nie bawić się w xml'e zapisane w iso tylko przejść na kodowanie 'utf-8' które jest przecież domyślnym kodowaniem xml. Wtedy można uniknąć wielu podobnych problemów. Przykładowo jak wprowadzicie do zawartości gałęzi encje do znaków, które iso nie posiada? saveXML() zamieni wszystkie '&' na '& a m p ;' i nici z encji ![]() |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
No tak, z checią bym tak zrobił (znaczy zmienił kodowanie pliku xml z win1250 na iso) tylko ze ja zapisuje sobie do tego pliku dane przez zwykłe funkcje plikowe. Dlatego zmienia mi sie format zapisanych danych zawsze na win. Jedynym rozwiązaniem tego problemu jest właśnie odczytanie danych i pozniejsza ich konwersja (według mnie).
Co do tego błędu w php co mówisz to jeżeli SAX (to takie do obsługi xml-a w php, chyba tak sie to nazywa :-P ) działa tak samo jak simplexml to to raczej nie jest błąd. Simplexml przetwarza dane i mają one zawsze wyjsciowe kodowanie utf-8 bo w takim kodowaniu powinien być plik xml(według mnie) i dlatego wyjście jest zawsze na utf-8 niezależnie od tego jaki format jest na wejściu. P.S. może znasz jakąś funkcje którą możesz zmienić kodowanie już zapisanego pliku *.txt bądź *.xml?? Pozdrawiam, Alk -------------------- I amar prestar aen
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
utf-8 jest domyślnym kodowaniem xml ale to nie znaczy, że nie można czy nie powinno sie używać innych kodowań. I tak samo powinny moim zdaniem zachowywać się rozszerzenia php do XML tymbardziej jeśli odczytują informację o kodowaniu znaków (rozszerzenie DOM to robi).
Co do konwersji kodowania to ja korzystam z mb_convert_encoding() z roszerzenia mbstring ale wiem, że wielu woli używać rozszerzenie iconv, kwestia upodobań ![]() |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
hmmm...
a czy mb_convert_encoding obsługuje konwersje pomiędzy np. iso i win? alo win - utf? Z tego co wiem to nie ma takiej możliwości przy użyciu iconv (też próbowałem przy tym problemie co miałem i jedynym rozwiązaniem okazało się użyciue funkcji zewnętrznych pozwalających na konwersje) -------------------- I amar prestar aen
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
hmm.. no właśnie mam wrażenie, że mb_convert_encoding() nie bierze tego naszego kodowania win.. i cholera nie mam pojęcia czemu, bo parę innych kodowań win bierze.. Sprawdź to dokładnie. Jeśli iconv ma podobne ograniczenie to jestem bezradny.
Ale.. dlaczego pliki php zapisuje Ci w kodowaniu win. Z tego co wiem da się na to wpływać i możesz ustawić aby php zapisywało pliki w wybranym przez Ciebie kodowaniu. |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
1) iconv na pewno nie obsługuje win1250 (99%).
2) co do ustawienia w jakim formacie ma zpaisywać pliki to sie nie spotkałem jeszcze, jak wiesz jak to zrobić to byłbym wdzięczny za jakiś kod, link czy chociaż nawe funkcji :-) -------------------- I amar prestar aen
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
Kiedyś widziałem jakiś przykład, który stosował mb_internal_encoding() i myślę, że to załatwia sprawę. Nie mniej upewnij się.
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 20.01.2004 Ostrzeżenie: (0%) ![]() ![]() |
Podpinam sie do tematu, rowniez mam problem z kodowanie xml. W bazie znaki sa zapisane prawidlowo, wyciagam wszystko z bazy i probuje zapisac do pliku xml, ktory niestety juz mi "krzaczy". Plik musze zapisac w utf-8 bo pozniej parsuje we Flashu ktory tylko takie kodowanie mi akceptuje. Fragment kodu ktory odpowiada za przetwarzanie:
Wiem ze to cos z xmlem bo jesli w foreach wyswietalam sobie $elementvalue to prezentuje mi prawidlowo, bylbym bardzo wdzieczny za pomoc |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
ale co Ci się krzaczy? Jak otwierasz zapisany plik widzisz krzaczki (w czym go oglądasz)? Jak próbujesz go spowrotem władować poprzez php są krzaczki?
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 20.01.2004 Ostrzeżenie: (0%) ![]() ![]() |
Tak otwierając dany plik, mam same krzaczki! Jak pisze wszystko jest ok do momentu zapisu do pliku
|
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
ponawiam pytanie -> w czym oglądasz ten plik? Może program, w którym oglądasz nie obsługuje bądź przyjmuje inne kodowanie niż kodowanie utf-8
|
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 20.01.2004 Ostrzeżenie: (0%) ![]() ![]() |
Ogladam go w Zendzie, ale to nie o to chodzi, moge go nawet nie ogladac i tak nie jest to poprawny utf-8, strona dla ktorej robilem panel to: www.gosia.com.pl/main.html (uwaga Flash!), wejdzcie w dzial 'Dewocjonalia' i tam pare pierwszych przegladnijcie, tak wygladaja znaki...
|
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
Ok.. czy strona, którą wyświetlacz by sprawdzić poprzez foreach wyniki (wtedy jest ok, jak piszesz) wyświetla się w kodowaniu 'utf-8'?
|
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 20.01.2004 Ostrzeżenie: (0%) ![]() ![]() |
Nie, kodowanie jest ustawione na stronie na iso-8859-2, byc moze to w ustawieniach porownan znakow i zapytan mysql w bazie, obecnie mam obydwa na latin2-general-ci, to juz jutro sprawdze, napisz prosze czy to moze byc przyczyna?
Ten post edytował poncjusz 28.06.2006, 23:39:12 |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
aha.. no to wszystko jasne. Dodajesz dane zapisane w iso-8859-2 jako utf-8. Musisz je przekonwertować na utf-8 przed dodaniem do drzewa DOM.
Bazę możesz zostawić jak jest, choć na przyszłośc polecam korzystać tylko z utf-8. Ważne by dane dodawane do DOM były w kodowaniu utf-8. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 6.05.2025 - 06:54 |