在PHP开发中遇到了这样的问题。UTF-8编码的字符保存到数据库时可能因为字符串过长被截取保存了,截取后的数据很可能就包含非法字符了。这样的字符放到XML中,会导致整个XML不合法,无法被解析,程序对数据的依赖性太大。即使是放到CDATA中也是如此。所以必须对可能的非法字串进行预处理。
发现PHP有个函数mb_check_encoding,可以判断是否是某个编码的合法字串:
function validUTF($str){
if( mb_check_encoding($str,"UTF-8") )
return $str;
else
return "Unknow data";
}
用上面的函数,返回的就一定是合法的UTF-8字串了,可用于组装XML. 非法数据毕竟是少数,用Unknow data代替。