I have a problem with using my new blog RSS feed. I wrote a post (the first one) with some code examples formatted by SyntaxHighlighter. To paste a code sample I'm switching from WYSIWYG to HTML view and put the code inside pre tag like this (don't worry, h4 tag was opened a line above the screenshot area):
The problem is that such pre tag, when later accessed via RSS feed contains br tags instead of new line characters. Below is screenshot of the adequate RSS source code:
What's most important when accessed via www, the post html is formatted fine, no brs inside pre. I verified that by downloading the blog post with wget. So I believe this isn't SyntaxHighlighter issue nor any 'new line' formatting on blog post save.
This is a real problem as I want aggregate my blog on employers blog and all formatting of code examples is broken because of that.
The base question is: how to get rid of those unwanted brs served via RSS?
What's strangest friend of mine also uses blogger for such aggregation and he has no such issue. I checked his RSS feed and there are no brs inside pre tags. We also compared settings of our blogs. However we have found no clue.
- The blog post
- RSS for the blog (just check source and search for string: pre class="brush)
- Mentioned friend's blog
Last thing: I see content served from RSS is now also html encoded. If I remember well, it wasn't previously.
UPDATE: I found no solution for this issue nor help anywhere. So I've written short PHP script to filter the feed source. Someone may find it useful so here it is:
<?php
$url = 'http://blog.tamashumi.com/feeds/posts/default';
$pre_pattern = '/(\<pre.*?"\>)(.*?)(\<\/pre\>)/';
$br_pattern = '/\<br \/\>/';
function br2nl($match) {
global $br_pattern;
$nobrs = preg_replace($br_pattern, "\n", $match[2]);
return "$match[1]$nobrs$match[3]";
}
$content = file_get_contents($url);
$content = preg_replace_callback($pre_pattern, 'br2nl', $content);
header('Content-type: application/atom+xml');
echo preg_replace($br_pattern, "<br/>\n", $content); // adding NLs
?>
A result of filtered feed can be obtained under the URL. On the first look it doesn't differ, the source does though.
Last thing to mention. I found that blogger had some time ago 'convert line breaks' flag among configuration settings. It's replaced now by new post-level settings:
I believe that my friends blog works as expected because it had the 'convert line breaks' flag set before it disappeared from the configuration panel and probably as a global setting it has influence also on the RSS. Those new post-level settings doesn't affect RSS feed anyhow. Well, that's only an assumption but I have found no other clue for this inconsistency...