我有一个PHP文件,它根据从多个源导入的数据生成Xml站点地图。由于导入数据的一行中存在非法字符,我的站点地图目前没有正确形成,但我正在努力将其删除。Xml中的非法字符
该字符看起来代表'平方'或上标2,并表示为正方形。我试过把它粘贴到一个十六进制编辑器中,但它被显示为?,并且十六进制代码也对应于?。我也尝试使用iconv从所有源编码转换到所有目的地编码,没有组合去除这个字符。
我也有以下函数删除非ASCII字符:
function stripInvalidXml($value)
{
$ret = "";
$current;
if (empty($value))
{
return $ret;
}
$length = strlen($value);
for ($i=0; $i < $length; $i++)
{
$current = ord($value{$i});
if (($current == 0x9) ||
($current == 0xA) ||
($current == 0xD) ||
(($current >= 0x20) && ($current <= 0xD7FF)) ||
(($current >= 0xE000) && ($current <= 0xFFFD)) ||
(($current >= 0x10000) && ($current <= 0x10FFFF)))
{
if($current != 0x1F)
{
$ret .= chr($current);
}
}
else
{
$ret .= " ";
}
}
return $ret;
}
但是这仍然没有删除它。如果我单步执行代码,非法角色会扩展到&#65535;在月食调试窗口中。它是一种与低于问题的字符串(希望它正确地贴)
251gm-50
上的功能的任何想法,这将删除此字符,并防止这种形式的出现是非常感激 - 我没有什么控制权导入的数据,因此需要在Xml生成时完成。
编辑
张贴我可以看到的字符不能正确显示后。在Eclipses窗口中查看时,它显示为&#65535; (不带空格 - 如果我离开的空间在它呈现的特点,它看起来像&#65535;)
+1提示DOM – Gordon 2010-07-14 12:10:14
很好的建议 - 我继承了一些代码,生成XML作为一个字符串,DOM会是一个更简洁的方法 – Macros 2010-07-14 12:12:54
DOM可能会产生像RSS feed那样的矫枉过正:他可能不需要所有的操作/搜索工具,而对于大文档,DOM结构的内存占用可能是过度 – Iacopo 2010-07-14 12:13:47