【PHP】过滤不完整的UTF-8字符的函数



    用IE打开某个XML文件时提示“无法显示XML页”,具体错误为“文本内容中发现无效字符”。用Notepad打开文件后发现有不完整字符,如下:

    不完整字符

    不完整字符

    于是也就想到写个函数来过滤,具体如下,实验有效


     
    
    /*
     * 过滤不完整的UTF8字符,UTF8的合法字符范围为:
     *     一字节字符:0x00-0x7F
     *     二字节字符:0xC0-0xDF 0x80-0xBF
     *     三字节字符:0xE0-0xEF 0x80-0xBF 0x80-0xBF
     *     四字节字符:0xF0-0xF7 0x80-0xBF 0x80-0xBF 0x80-0xBF
     */
    function FilterPartialUTF8Char($str)
    {
     $str = preg_replace("/[\\xC0-\\xDF](?=[\\x00-\\x7F\\xC0-\\xDF\\xE0-\\xEF\\xF0-\\xF7]|$)/", "", $str);
     $str = preg_replace("/[\\xE0-\\xEF][\\x80-\\xBF]{0,1}(?=[\\x00-\\x7F\\xC0-\\xDF\\xE0-\\xEF\\xF0-\\xF7]|$)/", "", $str);
     $str = preg_replace("/[\\xF0-\\xF7][\\x80-\\xBF]{0,2}(?=[\\x00-\\x7F\\xC0-\\xDF\\xE0-\\xEF\\xF0-\\xF7]|$)/", "", $str);
     return $str;
    }

    参考:字符编码笔记:ASCII、Unicode、UTF-8、UTF-16、UCS、BOM、Endian



    本博客所有文章如无特别注明均为原创。
    复制或转载请以超链接形式注明转自枫芸志,原文地址《【PHP】过滤不完整的UTF-8字符的函数
    标签:
    分享:

还没有人抢沙发呢~

无觅相关文章插件,快速提升流量