Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML] krzaki w znacznku - błąd kodowania?
Forum PHP.pl > Forum > XML, AJAX
adek-
Edytowany: Przepraszam nie zauważyłem powyżej sub działu dotyczącego samego XML -> bardzo przepraszam i proszę o przeniesienie jeżeli bardzo źle umieściłem mój wątek

Witam z xml'em dopiero dzisiaj zacząłem zabawę i dlatego w zasadzie mam dwa laickie problemy/pytania. Poszukał bym sam, ale na razie nie wiem jakie słowa kluczowe mam zahaczyć aby znaleźć rozwiązanie nurtującego mnie problemu.
1. dostałem duży plik xml po rozpakowaniu ponad 50 mb (wyszukiwarka rejsów na stronę z ogromną ilością wpisów), czy wczytywanie tego na stronę będzie miało wpływ na ładowanie się strony?
2. W tym pliku w niektórych znacznikach np: opis, pelny_opis,zdjecie, są składnie chaotycznych liter typu "xJio3 IL DSKJFlasdkfjie" a większość jest ok, co to może znaczyć?
wklejam przykład 1 rekordu z pliku xml:

  1. <rejs>
  2. <id_rejsu>105</id_rejsu>
  3. <nazwa>Norweskie Fiordy</nazwa>
  4. <data>
  5. <od>2006-06-10 00:00:00</od>
  6. <do>2006-06-17 00:00:00</do>
  7. </data>
  8. <typ_rejsu>standardowy</typ_rejsu>
  9. <statek>
  10. <id_statku>19</id_statku>
  11. <nazwa>MSC Lirica</nazwa>
  12. <linia>msc</linia>
  13. <opis>U3RhdGVrIG8gc3RhbmRhcmR6aWUgNCogbmFsZb+xY3kgZG8gZmxvdHkgTWVkaXRlcnJhbmVhbiBTaGlw
    cGluZyBDcnVpc2VzIChNU0MpLiBOYSA4IHBva7NhZPN3IHBhc2G/ZXJza2ljaCB6YWJpZXJhIDIuMjAwIHBhc2G/ZXLzdy4=</opis>
  14. <opis_pelny>rLiAyMm0mIzE3ODspLjwvZGQ+DQogPC9kbD4=</opis_pelny>
  15. <foto>http://namorzu.pl/images/statki/statek_msc_lirica.jpg</foto>
  16. </statek>
  17. <info_dodatkowe></info_dodatkowe>
  18. <opis>ZHplbml1OyBjZW55IHd5Y2llY3playBmYWt1bHRhdHl3bnljaCwgcHJvcG96eWNqZSBkb2phemR1IGRv
    IHBvcnR1LCBob3RlbGkgcHJ6ZWQvcG8gcmVqc2llIG5hIHphcHl0YW5pZS4NCjwvZGQ+DQo8L2RsPg==</opis>
  19. <mapka>http://namorzu.pl/namorzu/images/mapki/msc_norweskie_fiordy.jpg</mapka>
  20. <trasa_rejsu>Dania,Niemcy,Norwegia</trasa_rejsu>
  21. <promocja></promocja>
  22. <pilot> </pilot>
  23. <region>Norweskie Fiordy</region>
  24. <id_rejsu_wzorcowego></id_rejsu_wzorcowego>
  25. </rejs>


Poniżej przykład jak zacząłem wyciągać powoli dane, ale krzaki w znacznikach: opis, pelny_opis, zdjecie, mnie powstrzymały.
Domyślam się, że motyw ze zdjęciem to tak jak by otworzyć jpg w notatniku i pokazują się takowe krzaczki (trzeba bedzie uzyć jakiegoś dekodera czy jak), ale opis i pelny_opis? Zwłaszcza ze ponizej znacznik mapka pokazuje odnośnik do zdjęcia które wyświetla się poprawnie
  1. <?
  2. $rejsy = simplexml_load_file('dane/export.xml/baza.xml');
  3.  
  4. echo '<ul>';
  5. foreach ($rejsy->rejsy as $r) {
  6. foreach ($r->rejs as $rx) {
  7. echo '<li>XX ';
  8. echo $rx->id_rejsu;
  9. echo ': ';
  10. echo $rx->nazwa;
  11. echo ': ';
  12. echo $rx->data->od;
  13. echo ' ';
  14. echo $rx->data->do;
  15. echo ' (';
  16. echo $rx->typ_rejsu;
  17. echo ')</li>';
  18. foreach ($rx->statek as $s) {
  19. echo ' ';
  20. echo $s->id_statku;
  21. echo ': ';
  22. echo $s->nazwa;
  23. echo ' ';
  24. echo $s->linia;
  25. echo ': ';
  26. // echo $s->opis;
  27. //echo $s->opis_pelny;
  28. echo '<img src=" ';
  29. echo $s->foto;
  30. echo ' ">';
  31. }
  32. }
  33. echo '</ul></li>';
  34. }
  35. echo '</ul>';
  36. ?>


Proszę o podpowiedź

//EDITED - pozwoliłem sobie skrócić zakodowaną część opisu, żeby forum się nie rozjeżdżało.
ucho
base64?
adek-
Dziękuję Ci kolego "ucho"... obczytałem się co do base64 i już rozumie temat, jest wszystko ok ale mam problem - strona jest w utf-8 a xml w iso8859-2 próbuję przekodować na utf-8 w ten sposób ale nie działa:
  1. foreach ($s->opis as $os) {
  2. $utfos = utf8_encode ($os);
  3. }

ani encode ani decode na utf nie pomaga... czy taka konwersja z iso ma w ogóle rację bytu w przypadku strony w utf-8, czy tylko przerobienie całej strony na iso ma sens? Chociaż przyznam jest już dużo materiału na niej i tekstów więc pewnie było by to czasochłonne ;/
zenon13
może to ? iconv("utf-8","iso-8859-2",$text);
adek-
Faktycznie znalazłem manuala i się starałem zastosować do niego: string iconv ( string $in_charset , string $out_charset , string $str )
Lecz jeśli chodziło o ten deseń, to nie bardzo działa.
  1. foreach ($s->opis as $os) {
  2. iconv("iso-8859-2","utf-8",$os);
  3. }

próbowalem też kombinować w ten sposób
  1. foreach ($s->opis as $os) {
  2. echo base64_decode(iconv("iso-8859-2","utf-8",$os));
  3. }

jak sobie wpisze zamiast zmiennych tekst to mi niby przekonwertuje, ale gdy tekst mam jako zmienną z xml i do tego muszę dekodować go z base64 to nie bardzo chce działać... po prostu albo znika ten tekst i się nie wyświetla, albo wyświetla się bez zmian.
zenon13
Spróbuj odwrócić kolejność - najpierw base64_decode i dopiero iconv
adek-
Dzięki cała kolejność powinna wyglądać tak...
  1. echo iconv("iso-8859-2","utf-8",(base64_decode($os)));

niby takie proste ale niestety nie potrafiłem na to wpaść sam!
W zasadzie nie spodziewałem się, że najpierw trzeba przekonwertować na UTF zakodowany tekst a dopiero później go rozkodować z base64... wydawało mi się że dopiero po 'base64_decode' powinna się odbyć konwersja znaków O_o


--------------
Edytowane: Przepraszam , że jeszcze męczę - ale da się zrobić wyszukiwarkę danych które będą wyciągane z xml tak jak na stronie
Strona Atlas Tours

Oni to chyba mają bezpośrednio z serwera, a ja dostaję tylko plik xml....
W każdym bądź razie chodzi o to aby mieć coś jak to z prawej na górze jako skrypcik do wywoływania.... i poniżej wynik wyszukiwania, czy xml umożliwia takie przeszukiwanie i segregacje na odnośniki?
zenon13
Cytat
W zasadzie nie spodziewałem się, że najpierw trzeba przekonwertować na UTF zakodowany tekst a dopiero później go rozkodować z base64

No przecież jest dokładnie odwrotnie - najpierw wykonywane jest to co "wewnątrz". Ale to tak na boku
A co do przeszukiwania XML to szczerze nigdy tego nie robiłem - zawsze korzystam z zapytań w bazie danych ale jak rozumiem tu nie ma takiej opcji. Proponuję zapoznać się z XPath i XQuery
np. tu: http://www.php.net/manual/pl/class.domxpath.php
i tu http://www.w3schools.com/xquery/default.asp
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.