Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> polskie znaki i xml_parse - wszystko obciete po polskim znaku, parser obcina mi wszystko po polskim znaku bez względu na kodowanie
FinniFun
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 7.03.2007

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


Witam, problem tkwi w funkcji xml_parse(), która otrzymuje string danych(zarowno w utf-8 jak i iso-8859-2 nie dziala) i parsuje dobrze do czasu napotkania polskiego znaku.
Kod który odczytuje z pliku i parsuje wyglada nastepująco:
  1. <?php
  2. if(!($fp = fopen("xml/".$smarty->get_config_vars('rss_full_mine'),'r')))
  3. die($smarty->get_config_vars('error'));
  4.  
  5. while ($data = iconv("ISO-8859-2","UTF-8",fread($fp, 4096)))
  6. {
  7. $data=eregi_replace(">"."[[:space:]]+"."<","><",$data);
  8. if (!xml_parse($parser,$data, feof($fp))){}
  9. }
  10. ?>


Jeśli w while wyrzuce iconv i zostawie samo
  1. <?php
  2. while ($data =fread($fp, 4096))
  3. ?>

to to nic nie pomaga nadal jest tak samo. W funkcji która wyświetla na ekran dane uzyskane w wyniku powyższego kodu docierają już obcięte np: słowo "Paweł" dotrze w postaci "Pawe". Tak wiec problem tkwi dokładnie w linijce
  1. <?php
  2. if (!xml_parse($parser,$data, feof($fp))){}
  3. ?>

Znalazłem podobny post wcześniej ale tam komuś obcinało wszystko przed polskim znakiem. poradzono mu by podziałał z iconv ale jak już mówiłem u mnie to nie pomaga...pomocy.
Go to the top of the page
+Quote Post
-plexi-
post
Post #2





Goście







To chyba dlatego, że xml_parse() dziwnie traktuje polskie znaki. W momencie gdy taki napotka, ponownie wywołuje funkcję dla tagu otwierającego i nadpisuje część ciągu sprzed znaku. Oczywiście zależy jak funkcja dla tagu otwierającego jest zbudowana. Ja rozwiązałem to w ten sposób:


  1. <?php
  2. function tag_text($parser, $text){
  3. global $datx, $act_tag;
  4. $text = trim($text);
  5. if ($text) { 
  6. switch($act_tag) {
  7. case 'PL':  $datx[$act_tag]['pl'] = $datx[$act_tag]['pl'].$text; break;
  8. case 'EN':  $datx[$act_tag]['en'] = $datx[$act_tag]['en'].$text; break;
  9. }
  10. }
  11. }
  12. ?>
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 Aktualny czas: 20.08.2025 - 11:30