Are you using the WordPress sidebar feed widget? You may not have noticed, but feeds with different encodings may cause your page to have non-valid mark-up. This may or may not be of concern to you, but if it is, this hack should be helpful.
I say "hack" because this is NOT a plugin, but involves direct modification of the widgets.php file. If you try this, Please be Sure to Save a Back-up of the original file.
Important* Note* This hack requires the iconv function. From the PHP documentation:
To use functions provided by this module, the PHP binary must be built with the following configure line: –with-iconv[=DIR].
Also, if you are on a Windows or IBM server, or the results are not what you expect, Please read the documentation (actually, it's not a bad idea to read it anyway).
Open the content/plugins/widgets/widgets.php file.
In the widget_rss function find this section of code:
} else {
$desc = str_replace(array("n", "r"), ' ', wp_specialchars(strip_tags(html_entity_decode($item['description'], ENT_QUOTES)), 1));
$summary = '';
}
After the line with the closing curly brace add:
$feed_char_enc = $rss->feed_encoding;
$board_char_enc = get_bloginfo('charset');
if($feed_char_enc != $board_char_enc)
{
$conv_link = iconv($feed_char_enc, "$board_char_enc//IGNORE", $link);
$conv_desc = iconv($feed_char_enc, "$board_char_enc//IGNORE", $desc);
$conv_title = iconv($feed_char_enc, "$board_char_enc//IGNORE", $title);
$conv_summary = iconv($feed_char_enc, "$board_char_enc//IGNORE", $summary);
$link = ($conv_link != FALSE) ? $conv_link : $link;
$desc = ($conv_desc != FALSE) ? $conv_desc : $desc;
$title = ($conv_title != FALSE) ? $conv_title : $title;
$summary = ($conv_summary != FALSE) ? $conv_summary : $summary;
}
Which will now be before this line:
echo "<li><a class='rsswidget' href='$link' title='$desc'>$title</a>$summary</li>";
Notice that for the "out charset" I appended the "//IGNORE" string. This removes any characters that can't be converted. This is not entirely desirable, but using the default will result in the converted strings being terminated at the last valid character. A third option is to append the string "//TRANSLIT" instead. You may want to try it, but I found that the converted strings still caused non-valid mark-up.
To see the code with the indentation preserved and without the line breaks (easier to copy-paste) go to http://www.mittineague.com/dev/wh.php
![[PDA - Heathcare NOT Warfare - Sign the Petition.]](http://www.mittineague.com/blog/tmp/HealthNotWar_final.jpg)






One Comment
If you are looking for a way to stop RSS feeds with a character encoding different than your WordPress blog's character encoding from causing validation errors, please see rss.php Hack 1