我有一个PHP文件,它根据从许多来源导入的数据生成Xml站点地图.由于导入数据的一行中存在非法字符,我的站点地图目前状态不佳,但我正在努力将其删除.
该字符看起来代表’平方’或上标2,并表示为正方形.我已经尝试将其粘贴到十六进制编辑器中,但它显示为?,十六进制代码也对应于?.我也尝试使用iconv从所有源编码转换为所有目标编码,没有组合删除此字符.
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;
}
然而,这仍然没有删除它.如果我单步执行代码,非法字符将扩展到eclipses调试窗口.它遇到问题的字符串如下(希望它正确粘贴)
251gm-50
关于将删除此字符并防止出现此形式的函数的任何想法都非常感激 – 我几乎无法控制导入的数据,因此需要在生成Xml时完成.
编辑
发布后我可以看到该字符没有正确显示.在Eclipses窗口中查看时,它显示为& #65535; (没有空格 – 如果我在其中留下空格渲染角色,看起来像)
解决方法:
您正在尝试执行字符转码.不要自己动手,使用PHP库.
我发现iconv非常有用:
$cleanText = iconv('UTF-8','ISO-8859-1//TRANSLIT//IGnorE', $srcText);
此代码从utf-8转换为iso-8859,尝试重新映射“异国情调”字符并忽略无法转码的字符.
我只是猜测源编码是utf-8.您必须发现传入数据使用的编码,并在XML标头中声明的那个编译.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。