Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SimpleXML i kodowanie znaków
Forum PHP.pl > Forum > XML, AJAX > XML
Mich@ł
A więc tak, mam problem z kodowaniem znaków a konkretnie z literą "ś"... Korzystam z SimpleXML i jak czytałem przetwarza on xml na php w kodowaniu utf-8.

Moj plik xml jest w kodowaniu:
  1. <?xml version="1.0" encoding="iso-8859-2"?>


Plik php:
  1. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />


Przy wyświetlaniu brakowało mi całkowicie PL znaków a więc skorzystałem z iconv.
  1. <?php
  2. $opis = iconv("UTF-8", "ISO-8859-2", $foo->opis->asXML());
  3. ?>


Znaki typu ęą żł są jedynie brakuje "ś".

W czym może być problem?
EarthCitizen
A czy rzeczywiste kodowanie plików zgadza się z zadeklarowanymi nagłówkami?
Mich@ł
Tak, tutaj jest adres strony po przetworzeniu:
http://esna.pl/konta-osobiste.html

A tutaj jest plik xml:
http://esna.pl/xml/konta-osobiste.xml


Ew może jest jakaś gotowa klasa do PP bankiera?
EarthCitizen
  1. <?php
  2. $xml = simplexml_load_file('http://esna.pl/xml/konta-osobiste.xml');
  3. echo iconv('cp1250', 'ISO-8859-2', $xml->asXML());
  4. ?>
Mich@ł
EarthCitizen, rozwiązanie po części ok bo gdy przekonwertuje cały plik to kodowanie jest ok jednakże gdy chce prze konwertować tylko jedną zmienną to ucina tekst.

np.
  1. <?php
  2. $nazwa = iconv('cp1250', 'ISO-8859-2', $nazwa);
  3. lub
  4. $opis = iconv('cp1250', 'ISO-8859-2', $foo->opis->asXML());
  5. ?>
W wyniku tego tekst jest ucięty co można zobaczyć np tutaj:
http://esna.pl/konta-osobiste.html
EarthCitizen
No ale chyba ze złej strony do tego podchodzisz... Bo plik masz zapisany w cp1250 a nagłówek masz ISO-8859-2. Zmień kodowanie pliku na ISO-8859-2 i problem powinien sam się rozwiązać.

Widzę, że plik xml masz już dobrze zapisany, przynajmniej u mnie wszystko się dobrze wyświetla.
Mich@ł
Czyli PP z bankiera dawał by mi pliki xml z innym kodowaniem niż jest w nagłówku bo nie za bardzo rozumiem?

Czyli mam zmienić kodowanie pliku xml na cp1250? Bo plik po xml nawet jak zedytuje go jest zapisany w kodowaniu ISO-8859-2 bo tak mam standardowo ustawione w editplusie.
EarthCitizen
Nie wiem jak daje Ci bankier smile.gif ale myślę, że 2 serwis finansowy w Polsce raczej ma programistów, którzy dobrze ustawili kodowanie:) Może niechcący zapisałeś ten plik w notatniku czy coś...

Jak zapisujesz ten plik z bankiera? pobierasz go przez php?
Mich@ł
EarthCitizen, faktycznie coś jest u mnie nie tka bo jak pobieram poprzez php plik xml bezpośrednio od nich to kodowanie jest ok (konwertuje utf=8 => ISO-8859-2).

A więc pewnie przy zapisywaniu pliku poprzez FF zmienia się kodowanie...


Mam jeszcze jeden mały problemik a konkretniej że gdy w xmlu jest:
  1. <?php
  2. <ul>
  3. <li>konto oszcz&#281;dnościowe ponad 5%</li>
  4. <http://forum.php.pl/index.php?showtopic=111714&pid=560212&st=0&#entry560212li>0 zł za wypłatę w bankomatach Citi Handlowy, w sieci Euronet i eCard</li>
  5. <li>ponad 100 oddzia&#322;ów w całej Polsce</li>
  6. <li>wiele kont do wyboru: tanie konto internetowe CitiOne Direct, Konto Oszcz&#281;dnościowe, CitiKonto oraz CitiOne</li>
  7. </ul>
  8. ?>

i teraz gdy chce to wyświetlić:
  1. <?php
  2. $opis = iconv('utf-8', 'ISO-8859-2', $foo->opis->asXML());
  3. ?>


to zawartość tej zmiennej nie jest przerabiana na html a wyświetla się razem ze znacznikami <li>
http://esna.pl/konta-osobiste.html


Cytat
Jak zapisujesz ten plik z bankiera? pobierasz go przez php?
poprzez FF i tu jest przyczyna zapewne smile.gif

[edit]
Ok już sobie z tym poradziłem winksmiley.jpg

znaki ">" i "<" były w innym kodowaniu i dlatego wyświetlało tekst zamiast przerobić go na html winksmiley.jpg

Dzięki za pomoc smile.gif
EarthCitizen
Cytat
A więc pewnie przy zapisywaniu pliku poprzez FF zmienia się kodowanie...


A co ma do tego FF? Pobierasz plik do textarea i wtedy zapisujesz przez formularz?

Cytat
$opis = iconv('utf-8', 'ISO-8859-2', $foo->opis->asXML());
zawartość tej zmiennej nie jest przerabiana na html a wyświetla się razem ze znacznikami


Zawartość zmiennej nie będzie przerabiana na html bo iconv nie jest od tego, jak chcesz zamienić encje na html to użyj html_entity_decode() lub htmlspecialchars_decode()
Tak w ogóle to skąd tam encje? Coś masz źle przy zapisie ...
Mich@ł
Pliki xml zapisywałem poprzez "zapisz jako". Ale widzę że problem był chyba z moim edytorem i to on konwertował dokument.

Cytat
Zawartość zmiennej nie będzie przerabiana na html bo iconv nie jest od tego, jak chcesz zamienić encje na html to użyj html_entity_decode() lub htmlspecialchars_decode()

Ja osobiście zrobiłem tak:
Cytat
$opis = str_replace('&lt;','<', $opis);
$opis = str_replace('&gt;','>', $opis);

i śmiga winksmiley.jpg
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.