跟老姚学前端,课程体系更完善,10%基础 + 90%实战演练,快人一步学编程

扫一扫浏览

PHP采集入库对内容中的特殊字符处理

未结贴
0 4536
鸿哥站长未认证 2018-07-18 09:54:54
收藏

今天Linux上用PHP做采集入库遇到了mysql的报错:SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xF4\x8F\xB1\x82\xF4\x8F...' for column 'content' at row 1

1531878758892403.png

远程mysql版本为5.7;

通过排查发现是内容中有特殊字符,按照网上的方式把数据库和表的字符集改为:utf8mb4  没用,问题依旧。

在本地Windows上测试没有报错,但插入的内容是不完整的;特殊字符后面的内容是被截断了的

1531878804804369.png

那么就在插入之前再用程序过滤吧,虽然这样有损效率;

PHP过滤特殊字符代码:

/**
* 过滤字符串,保留UTF8字母数字中文及部份符号
* www.timeblog.cn
* @param  String $ostr 
* @return String
*/
public function filter_utf8_char($ostr){
    preg_match_all('/[\x{FF00}-\x{FFEF}|\x{0000}-\x{00ff}|\x{4e00}-\x{9fff}]+/u',$ostr,$matches);
    $str=join('', $matches[0]);
    /*含有特殊字符需要逐个处理*/
    if($str==''){
        $returnstr='';
        $i=0;
        $str_length=strlen($ostr);
        while($i<=$str_length){
            $temp_str=substr($ostr,$i,1);
            $ascnum=Ord($temp_str);
            if($ascnum>=224){
                $returnstr=$returnstr.substr($ostr,$i,3);
                $i=$i+3;
            }elseif($ascnum>=192){
                $returnstr=$returnstr.substr($ostr,$i,2);
                $i =$i+2;
            }elseif($ascnum>=65 && $ascnum<=90){
                $returnstr=$returnstr.substr($ostr,$i,1);
                $i=$i+1;
                /*特殊字符*/
            }elseif($ascnum>=128 && $ascnum<=191){
                $i=$i+1;
            }else{
                $returnstr=$returnstr.substr($ostr,$i,1);
                $i=$i+1;
            }
        }
        $str=$returnstr;
        preg_match_all('/[\x{FF00}-\x{FFEF}|\x{0000}-\x{00ff}|\x{4e00}-\x{9fff}]+/u',$str,$matches);
        $str=join('',$matches[0]);
    }
    return $str;
}
文章来自于时间博客:《 PHP采集入库对内容中的特殊字符处理
最近热帖 HOT TOPIC
【全套视频】thinkphp5视频教程 96865
父元素flex之后,子元素高度自适应问题 11805
一张纸的厚度是0.01毫米,则该纸对折30次后是多厚(据说超过珠穆朗玛峰的高度)php实现 11372
如何收废品才能赚钱,有什么技巧?揭秘垃圾回收行业的一些规则 11114
thinkphp5隐藏默认模块的一些问题 10828
api接口文档插件easydoc的基本用法,快速搞定接口文档 10647
PHP如何判断字符串是否为json格式 10498
校园跑腿市场目前怎么样?校园跑腿系统给学生带来了哪些便捷? 10461
omnicore rpc api中文手册【usdt】 10415
教你如果处理高并发数据不同步的问题php篇 10139
月度热议HOT COMMENTS
【全套视频】thinkphp5视频教程 77
tpframe 后续版本你希望有的功能是什么(分享贴) 12
权限那里怎么一登录别的账号就报错啊 9
关于tpframe的一点话题 6
cms插件在分类排序的时候JSON错误 6
基于tpframe v3.x 的微信公众号插件已批量上线 5
tpframe插件tcms插件v2.2已发布上线,欢迎下载使用 5
tpframe6.0马上就要跟大家见面了,一次全新的升级 5
透析thinkphp5升级版开发框架tpframe 3
新增的管理员没有权限操作CMS模块。 3
爆料早知道: