Which is better for encoding HTML for RSS?

2019-04-10 20:05发布

问题:

I recently introduced HTML into some RSS feeds that I publish (which up to now only had plain text, no markup), and I was wondering which method is better: use character encoding (such as htmlspecialchars) or just encapsulate everything in CDATA?

It seems to me that CDATA might be easier, but I'm unclear as to whether there might be any reasons (subtle or otherwise) for choosing one approach versus the other. (For starters, the CDATA approach would be easier to read when viewing source...)

回答1:

CDATA is for any data that should not be parsed by the XML parser. Any tags not in a CDATA block will be parsed by the XML parser and may take on a different meaning.

CDATA can also incur an overhead for the parsers if there is no need for it. Try to avoid CDATA blocks any time you know HTML (or otherwise) won't be used, otherwise use it.

That said, I do agree with jamesh, in that you should always prefer Atom over RSS. I produce a feed reader and when scraping feeds, always prefer Atom over RSS.



回答2:

Personally CDATA is easier, as it allows the display of the actual HTML by the subscriber without their reader needing to do anything funny.

If you use HTML Encoding, the subscribers reader, or website iteself, must decode the source to display the HTML



回答3:

At the risk of giving you the answer you may not want to hear: use Atom instead of RSS.

Atom is nicely namespaced XML, so you can mix and match XHTML right in, without having to worry about the encoding issue you ask about.

It's pretty much supported everywhere RSS is, and because it's just vanilla Atom, it's easier to roll your own if you really don't want to use a library to manipulate it.

Atom is also a IETF standard, which RSS isn't.



回答4:

htmlentities() works like a charm. No need to use CDATA. http://php.net/manual/en/function.htmlentities.php



标签: php rss cdata