Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][xml] Parsowanie pliku XMLReader() i zmina kodowania z UTF na ISO, jak użyć funkcji iconv() a może zastosować swoją?
kukix
post 25.09.2008, 00:25:13
Post #1





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


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. ?>


Ten post edytował kukix 25.09.2008, 00:26:14
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
deirathe
post 25.09.2008, 09:49:25
Post #2





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

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


A plik masz zapisany w ANSI czy w Unicode? Ten w ktorym znaduje sie parser?

Ten post edytował deirathe 25.09.2008, 11:15:25


--------------------
Kawałek mojego blogu
Everything should be as simple as possible but not simpler.
A Einstein
Go to the top of the page
+Quote Post
kukix
post 25.09.2008, 11:12:28
Post #3





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


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

Ten post edytował kukix 25.09.2008, 11:14:02
Go to the top of the page
+Quote Post
deirathe
post 25.09.2008, 11:17:02
Post #4





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

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


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

Ten post edytował deirathe 25.09.2008, 11:21:08


--------------------
Kawałek mojego blogu
Everything should be as simple as possible but not simpler.
A Einstein
Go to the top of the page
+Quote Post
kukix
post 25.09.2008, 15:38:35
Post #5





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


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..
Go to the top of the page
+Quote Post
deirathe
post 25.09.2008, 20:32:35
Post #6





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

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


  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. ?>


--------------------
Kawałek mojego blogu
Everything should be as simple as possible but not simpler.
A Einstein
Go to the top of the page
+Quote Post
kukix
post 3.10.2008, 14:56:06
Post #7





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


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ć...

Ten post edytował kukix 1.10.2008, 15:34:57
Go to the top of the page
+Quote Post
deirathe
post 3.10.2008, 15:35:20
Post #8





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

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


Ja polecam utf-8 i zmiane admina tongue.gif jezeli masz mozliwosc bo admin co ucina co chwile dostep to troche nie poreczny jest


--------------------
Kawałek mojego blogu
Everything should be as simple as possible but not simpler.
A Einstein
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 23.06.2025 - 22:39