Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][xml] Parsowanie pliku XMLReader() i zmina kodowania z UTF na ISO
Forum PHP.pl > Forum > PHP
kukix
Witam.

Mam taką funkcję, która parsuje plik xml.
Probvlem w tym, że wszystkie znaki zapisywane są przy uzyciu kodowania UTF-8.
Ustawiając na w p[rzegladarce strone kodową UTF-8 (z menu prawego klawisza) pokazują się poprawnie polskie literki.

  1. <?php
  2. while($reader->read()) {
  3.    if($reader->nodeType == XMLReaderELEMENT) {
  4.        $name = $reader->name;
  5.    }
  6.  
  7.    if($reader->nodeType == XMLReaderTEXT ||
  8.       $reader->nodeType == XMLReaderCDATA)
  9.    {
  10.        echo $name.' '.$reader->value.'<br />';
  11.    }
  12. }
  13. ?>


Wiem, że funkcja iconv() służy do zmiany kodowania, jednak nie chce zadziałac.

Mam również swoją funkcję zmiany znaków:
  1. <?php
  2. function polskie_znaki($tekst) {
  3.  
  4.    $znak_a[1] = 'Ä…';
  5.    $znak_a[2] = 'Ä„';
  6.    $znak_a[3] = 'Ĺş';
  7.    $znak_a[4] = 'Ĺą';
  8.    $znak_a[5] = 'ĹĽ';
  9.    $znak_a[6] = 'Ĺ&raquo;';
  10.    $znak_a[7] = 'Ĺ›';
  11.    $znak_a[8] = 'Ĺš';
  12.    $znak_a[9] = 'ć';
  13.    $znak_a[10] = 'Ć';
  14.    $znak_a[11] = 'Ä™';
  15.    $znak_a[12] = 'Ę';
  16.    $znak_a[13] = 'Ĺ„';
  17.    $znak_a[14] = 'Ń';
  18.    $znak_a[15] = 'Ĺ‚';
  19.    $znak_a[16] = 'Ł';
  20.    $znak_a[17] = 'Ăł';
  21.    $znak_a[18] = 'Ă“';
  22.  
  23.    $znak_b[1] = 'ą';
  24.    $znak_b[2] = 'Ą';
  25.    $znak_b[3] = 'ź';
  26.    $znak_b[4] = 'Ź';
  27.    $znak_b[5] = 'ż';
  28.    $znak_b[6] = 'Ż';
  29.    $znak_b[7] = 'ś';
  30.    $znak_b[8] = 'Ś';
  31.    $znak_b[9] = 'ć';
  32.    $znak_b[10] = 'Ć';
  33.    $znak_b[11] = 'ę';
  34.    $znak_b[12] = 'Ę';
  35.    $znak_b[13] = 'ń';
  36.    $znak_b[14] = 'Ń';
  37.    $znak_b[15] = 'ł';
  38.    $znak_b[16] = 'Ł';
  39.    $znak_b[17] = 'ó';
  40.    $znak_b[18] = 'Ó';
  41.  
  42.    $tekst = ereg_replace($znak_a[$i], $znak_b[$i], $tekst);
  43.  
  44.    return $tekst;
  45.  
  46. }
  47. ?>


Czy funkcją iconv() mozna zastąpić tą przygotowaną przezemnie? będze wydajniejsza?

Będe bardzo wdzięczny za wszelkie wypowiedzi.



------------------- EDIT ----------------
Funkcji iconv próbowalem, jednak coś nie działa:

  1. <?php
  2. echo iconv('UTF-8', 'ISO-8859-2', 'przejściówki');
  3. ?>
deirathe
A plik masz zapisany w ANSI czy w Unicode? Ten w ktorym znaduje sie parser?
kukix
Cytat(deirathe @ 25.09.2008, 10:49:25 ) *
A plik masz zapisany w ANSI czy w UTF? Ten w ktorym znaduje sie parser?


w EditPlus'ie zapisuje z kodowaniem ANSI
deirathe
Ok, najpierw wczytaj plik, przekonwertuj go iconv, stworz domdocument i ustaw kodowanie iso, wczytaj dane do domdocument i dopiero sparsuj powiedz czy dziala, jezeli nie to ja sprobuje zadzialac troszke pozniej
kukix
Cytat(deirathe @ 25.09.2008, 12:17:02 ) *
Ok, najpierw wczytaj plik, przekonwertuj go iconv, stworz domdocument i ustaw kodowanie iso, wczytaj dane do domdocument i dopiero sparsuj powiedz czy dziala, jezeli nie to ja sprobuje zadzialac troszke pozniej



Tylko, że problem w tym, że cala operacja bedzie wykonywana dosyć czesto i chciałbym wszystko zamiescić w jednym skrypcie...

spróbuje zrobić tak jak napisałes..
deirathe
  1. <?php
  2. $raw = file_get_contents("twoj_plik.xml");
  3. $raw =  iconv('UTF-8', 'ISO-8859-2', $raw);
  4.  
  5. $dom  = new DOMDocument( "1.0", "ISO-8859-2" );
  6. $dom->loadXML($raw);
  7. //parsowanie ponizej
  8. //i juz
  9. ?>
kukix
wielkie dzieki za fatyge...


u mnie parser wyglada mniej więcej tak:

  1. <?php
  2. $reader = new XMLReader();
  3. $reader->open("plik.xml");
  4.  
  5. while($reader->read()) {
  6.  
  7.  //operacje na danych
  8.  
  9. }
  10. ?>


jak mam połączyć Twój kawałek kodu z moim?
próbowalem tak:
  1. <?php
  2. $raw = file_get_contents("twoj_plik.xml");
  3. $raw =  iconv('UTF-8', 'ISO-8859-2', $raw);
  4.  
  5. $reader = new XMLReader();
  6. $reader->open($raw);
  7.  
  8. while($reader->read()) {
  9.  
  10.  //operacje na danychy
  11.  
  12. }
  13. ?>


---------------- EDIT --------------
Mam problem z testami, bo admin co chwile "blokuje" mi plik parsera

chyba jednak zmienie kodowanie wszystkich stron na UTF-8 .. wszedzie zabawa z tym kodowaniem.. AJAX, Xml .. sciana.gif

serwer ledwo parsuje plik 40MB a jeszcze musie kodowaniem sie zajmować...
deirathe
Ja polecam utf-8 i zmiane admina tongue.gif jezeli masz mozliwosc bo admin co ucina co chwile dostep to troche nie poreczny jest
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.