Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: polskie znaki i xml_parse - wszystko obciete po polskim znaku
Forum PHP.pl > Forum > Przedszkole
FinniFun
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.
plexi
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. ?>
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.