【发布时间】:2011-03-15 19:40:34
【问题描述】:
我有一个 PHP 文件,它根据从多个来源导入的数据生成 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;
}
但是这仍然没有删除它。如果我单步执行代码,则非法字符会在 Eclipse 调试窗口中展开。它遇到问题的字符串如下(希望它正确粘贴)
251gm-50
任何关于删除此字符并防止此表单发生的功能的想法都非常感谢 - 我对导入的数据几乎没有控制权,因此需要在生成 Xml 时完成。
编辑
发布后,我可以看到角色没有正确显示。在 Eclipses 窗口中查看时,它显示为 ; (没有空格 - 如果我在其中留下空格,则会呈现字符,看起来像)
【问题讨论】: