Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [xml/php5] Kodowanie - polskie znaki
slawa
post
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 8.02.2005

Ostrzeżenie: (0%)
-----


Mam plik xml o nastpujcej postaci:
  1. <?xml version="1.0" encoding="ISO-8859-2"?>
  2. <a>
  3. <b>ąąśśźźżżććńńóółł<b>
  4. </a>


Wyciągam z niego informację zawartą w <b></b> za pomoca php5:
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  5. <title>XML - Technologia XPath</title>
  6. </head>
  7. <body>
  8. <p>śćźżńóąłłłżżżżżżźźźź</p>
  9. <?
  10. $file_name="e.xml";
  11. function getElementa ($file_name,$elementName)
  12. {
  13. $doma = new DomDocument(); 
  14. $doma->load($file_name);
  15. $titles = $doma->getElementsByTagName($elementName);
  16. $k=0;
  17. foreach($titles as $node) 
  18. { 
  19. $x[$k]= $node->textContent;
  20. $k++;
  21. }
  22. return $x;
  23. }
  24. $a=getElementa($file_name,'b');
  25. echo $a[0];
  26. ?>
  27. </body>
  28. </html>


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mariuszn3
post
Post #2





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:
  1. <?php
  2. $node->nodeValue = mb_convert_encoding($node->nodeValue, 'iso-8859-2', 'utf-8');
  3. ?>

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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie
- slawa   [xml/php5] Kodowanie - polskie znaki   22.02.2006, 13:52:42
- - splatch   getElementsByTagName ma niewiele wspólnego z XPath...   27.02.2006, 19:52:33
- - Alkagar   witam, pisze tutaj bo szkoda zakładać nowego tema...   20.06.2006, 13:55:00
- - webik   Witam do Alkagar mialem ten sam problem sproboj u...   27.06.2006, 15:36:50
- - Alkagar   Miałem to tylko, że to nie działa . Ale udało mi ...   28.06.2006, 09:56:00
- - mariuszn3   Też miałem ten problem, znalazłem na to takie na o...   28.06.2006, 11:29:19
- - Alkagar   No tak, z checią bym tak zrobił (znaczy zmienił ko...   28.06.2006, 11:46:21
- - mariuszn3   utf-8 jest domyślnym kodowaniem xml ale to nie zna...   28.06.2006, 11:53:33
- - Alkagar   hmmm... a czy mb_convert_encoding obsługuje konwer...   28.06.2006, 12:01:28
- - mariuszn3   hmm.. no właśnie mam wrażenie, że mb_convert_encod...   28.06.2006, 12:07:07
- - Alkagar   1) iconv na pewno nie obsługuje win1250 (99%). 2)...   28.06.2006, 12:14:57
- - mariuszn3   Kiedyś widziałem jakiś przykład, który stosował mb...   28.06.2006, 12:28:15
- - poncjusz   Podpinam sie do tematu, rowniez mam problem z kodo...   28.06.2006, 23:04:13
- - mariuszn3   ale co Ci się krzaczy? Jak otwierasz zapisany plik...   28.06.2006, 23:09:22
- - poncjusz   Tak otwierając dany plik, mam same krzaczki! J...   28.06.2006, 23:16:39
- - mariuszn3   ponawiam pytanie -> w czym oglądasz ten plik? M...   28.06.2006, 23:19:46
- - poncjusz   Ogladam go w Zendzie, ale to nie o to chodzi, moge...   28.06.2006, 23:27:01
- - mariuszn3   Ok.. czy strona, którą wyświetlacz by sprawdzić po...   28.06.2006, 23:34:24
- - poncjusz   Nie, kodowanie jest ustawione na stronie na iso-88...   28.06.2006, 23:38:13
- - mariuszn3   aha.. no to wszystko jasne. Dodajesz dane zapisane...   28.06.2006, 23:42:38
- - poncjusz   Chyba nie o to chodzi do końca, bo np. w phpmyadmi...   29.06.2006, 09:15:48
- - mariuszn3   To nie ma znaczenia. phpMyAdmin zapewne informuje ...   29.06.2006, 11:15:07
- - Maslav   Hej. Mam podobny problem. Generuję xml z bazy dany...   8.12.2006, 13:30:24


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.04.2026 - 20:39