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%)
-----


Ciekawy pomysł ale niestety nie pomoże, znaki które wysypują plik są czesko/słowackie np. "Skoru?ina", "Skoru?inske vrchy", "?trbské Pleso". Poza tym jest to kanał turystyka więc równie dobrze autorzy mogą wkleić nazwy niemieckie, arabskie czy jakiekolwiek inne.

W internetowych czytnikach zauważyłem 2 podejścia:
- odczytanie całego pliku i wyświetlenie informacji w taki sposób, w jaki widać po odpaleniu pliku xml w przeglądarce,
- odczytywanie pliku po kawałku, wysypuje się kiedy ma odczytać informację z błędnym kodowaniem,

Zaczynam dochodzić do wniosku że jedynym sposobem jest napisanie własnej klasy do obsługi xml, alby to w końcu zadziałało. Choć tak naprawdę, to powinien być problem interii żeby trzymała się standardów.

edit:

Znalazłem klasę która odczytuje plik kawałkami, wysypuje się gdy trafi na nieodpowiednie kodowanie, ale to i tak lepsze niż nic (IMG:style_emoticons/default/smile.gif)

http://articles.sitepoint.com/article/php-...parsing-rss-1-0

Ten post edytował taktu 27.12.2009, 13:46:14
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: 30.12.2025 - 04:43