Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [XML] DOM i SimpleXML, rss interii mnie załamuje
taktu
post
Post #1





Grupa: Zarejestrowani
Postów: 89
Pomógł: 7
Dołączył: 19.05.2008

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


Pytanie: jak dobrać się do pliku rss który publikuje interia?

plik: http://kanaly.rss.interia.pl/turystyka.xml

problem: kodowanie pliku to UTF-8, ale znalazły się w nim słowackie znaki które w UTF już niestety nie są.

Do tej pory używałem:

  1. $rssObject = simplexml_load_string( $address, 'SimpleXMLElement', LIBXML_NOCDATA );


Co dało błędy:
  1. Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Start tag expected, '<' not found in
  2. Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in


Więc spróbowałem:

  1. $xmlDoc = new DOMDocument();
  2. $xmlDoc->load( $address );


No i błąd:

  1. Warning: DOMDocument::load() [function.DOMDocument-load]: Input is not proper UTF-8, indicate encoding ! Bytes: 0xB9 0x69 0x6E 0x73 in http://kanaly.rss.interia.pl/turystyka.xml, line: 94 in


Błąd ominąłem w simplexml_load_string:
  1.  
  2. $file = file_get_contents( $address );
  3.  
  4. $content = mb_convert_encoding( $content, 'UTF-8', mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true));
  5. //lub
  6. $content = iconv( mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true), 'UTF-8', $content );
  7. //efekt ten sam
  8.  
  9. if ($rssObject = simplexml_load_string( $content, 'SimpleXMLElement', LIBXML_NOCDATA ) ){
  10. // ...
  11. }

i otrzymałem
  1. ?šwiÄ?ta Bo??ego Narodzenia we W??oszech sÄ? obchodzone na wiele r?(IMG:style_emoticons/default/questionmark.gif) ?nych sposob??w


Czy ktoś ma większe doświadczenie w kodowaniach? Zależy mi na tym aby tekst był czytelny, słowackie znaki mogą być wykrzaczone. Wszelka pomoc mile widziana.

Ten post edytował taktu 26.12.2009, 19:30:21
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
taktu
post
Post #2





Grupa: Zarejestrowani
Postów: 89
Pomógł: 7
Dołączył: 19.05.2008

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


Dzięki za odpowiedź, rzeczywiście zadziałało tak jak trzeba.

Dodam tylko na koniec że nie warto podpowiadać funkcji mb_detect_encoding() jakich kodowań ma szukać. Okazało się że z podpowiedziami źle wykrywała kodowanie..


  1. //wystarczyło linię:
  2.  
  3. $content = mb_convert_encoding( $content, 'UTF-8', mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true));
  4.  
  5. //zamienic na:
  6.  
  7.  
  8. $content = mb_convert_encoding( $content, 'UTF-8', mb_detect_encoding($content));


i działa równie dobrze.

Ten post edytował taktu 27.12.2009, 17:51:29
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 28.12.2025 - 21:12