微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – Xml中的非法字符

我有一个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;
}

然而,这仍然没有删除它.如果我单步执行代码,非法字符将扩展到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标头中声明的那个编译.

一个猜测文件编码的linux命令行工具是enca

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。