直感的な操作が売りの CMS である「concrete5」の古いバージョンで RSS フィードがうまく表示されないという問題がありました。
原因は UTF8 だけど、XML では使えない文字列が存在していたので、RSS Feed リーダーでエラーが出ていたのでした。
テキストも UTF8 にきちんとエンコーディングして、文字列も
<?xml version="1.0" encoding="UTF-8"?>
と指定しているのに
Chrome で
PCDATA invalid Char value XX. Below is a rendering of the page up to the first error.
というエラーが表示され、正常に XML が表示されなくなっていました。
これは、XML ではサポートしていない文字列があるからです。
なので、それらの 文字列を取り除く簡単な PHP 処理がこれです。
PHP5.4 以前の場合
function utf8_for_xml($string) { return preg_replace ('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u', ' ', $string); }
参考 & コード引用
http://stackoverflow.com/questions/12229572/php-generated-xml-shows-invalid-char-value-27-message
PHP 5.4 から
PHP5.4 より htmlspecialchars() で XML 処理ができるようになりました。
htmlspecialchars($string, ENT_XML1, "UTF-8")
参考
http://php.net/manual/ja/function.htmlspecialchars.php
以上