Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Czyszczenie stringa pod XML (rss)
Avatarus
post
Post #1





Grupa: Zarejestrowani
Postów: 304
Pomógł: 0
Dołączył: 12.12.2006
Skąd: Pszów

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


Witam
Potrzebuje porady, jak skutecznie oczyścić jakiś string, tak żeby był w pełni zgodny z standardem XML

Mam czasem dziwne opisy i przez to RSS się sypie.

umnie RSS jest generowany tak:

  1. <item>
  2. <title>'.bbcode(strip_tags(html_entity_decode(($wiersz[1])))).'</title>
  3. <link rel="alternate" href="http://www.swtor-online.com.pl/news.php?id='.$wiersz[2].'"/>
  4. <guid>http://www.swtor-online.com.pl/news.php?id='.$wiersz[2].'</guid>
  5. <pubDate>'.date("r",$wiersz[3]).'</pubDate>
  6. <description>'.htmlspecialchars(bbcode(strip_tags(html_entity_decode(substr($wiersz[4],0,1000))))).'... '.'</description>
  7. </item>';


wszytko oczywiście w pętli. Kodowanie UTF-8
Będę wdzięczny za pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Powiem, że z rss zawsze są drobne problemy, zwłaszcza z encjami pod iso. Jedyne sensowne rozwiązanie tego problemu to htmlspecialchars użyte na całej treści a dodatkowo cała zawartość description ujęta w CDATA. Dopiero wtedy się nie rozwala. Brak CDATA najczęściej kończy się problemem z interpretacją encji, bo nie wie rss jak traktować poprzedzający go &, nawet jeśli widzi $ amp; to nie zawsze traktuje to jako całość, a co gorsza to ciąg & amp;4676; nie przetworzy do encji prawidłowej. Sam się na to kiedyś naciąłem. Kombinacja htmlspecialchars + CDATA działa zawsze (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Avatarus
post
Post #3





Grupa: Zarejestrowani
Postów: 304
Pomógł: 0
Dołączył: 12.12.2006
Skąd: Pszów

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


a możesz pokazać na przykładzie?
Go to the top of the page
+Quote Post
thek
post
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




To jedynie dodanie do Twojego przykładu CDATA tak naprawdę (IMG:style_emoticons/default/smile.gif)
  1. '<description><![CDATA['.htmlspecialchars(bbcode(strip_tags(html_entity_decode(substr($wiersz[4],0,1000))))).'... ]]></description>
Go to the top of the page
+Quote Post
Avatarus
post
Post #5





Grupa: Zarejestrowani
Postów: 304
Pomógł: 0
Dołączył: 12.12.2006
Skąd: Pszów

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


no i działa.
Nie trzeba nawet reszty tych funkcji, tylko samo gdata + substr
Wielkie dzięki
Go to the top of the page
+Quote Post
thek
post
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Ja zawsze mimo wszystko robię strip_tags... Nie ma sensu wrzucać w description jakiegokolwiek znacznika z racji tego, że jeśli masz cięcie stringa z automatu (substr) to na bank wystąpi Ci w pewnym momencie nie sparowanie zamknięć.
Go to the top of the page
+Quote Post
Avatarus
post
Post #7





Grupa: Zarejestrowani
Postów: 304
Pomógł: 0
Dołączył: 12.12.2006
Skąd: Pszów

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


masz racje. Poprawiłem to.
Go to the top of the page
+Quote Post

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: 23.08.2025 - 11:04