开发者社区> 问答> 正文

PHP中文文件名入库时出错?报错

程序扫描某目录下,文件扩展名为JPG的所有文件。其中,中文文件名入MYSQL库时报错,提示:Incorrect string value: '\xB8\xB4\xBC\xFE" 之类的,是什么原因造成的呢。

起初以为是BOM头引起的,但是经过程序检测,所有中文文件名的文件皆不含BOM,求各位大神指点

环境:PHP 5.3.1

        windows 2003

展开
收起
爱吃鱼的程序员 2020-06-22 21:54:12 492 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    字符集问题吧,统一uft8不是很好么回复<aclass='referer'target='_blank'>@JayKong:效率低可以转换10000次看个时间对比,bug可以google到回复<aclass='referer'target='_blank'>@陈俊贤:愿闻其详。iconv为何会效率低且有BUG呢?回复<aclass='referer'target='_blank'>@JayKong:转换字符最好用mb_convert_encoding,iconv效率低还有bug回复<aclass='referer'target='_blank'>@陈俊贤:非常谢谢仁兄,借用你的灵感,想到了解决办法,确实是字符集的问题。解决办法就一条代码,哈哈。$file=iconv(mb_detect_encoding($file),'UTF-8',$file);回复<aclass='referer'target='_blank'>@JayKong:用mb_detect_encoding检测下是什么编码数据库用的什么字符集啊?谢谢仁兄的热情帮忙,问题已经解决,确实是字符集的问题,只要将中文文件转换编码即可,$file=iconv(mb_detect_encoding($file),'UTF-8',$file);那你看看php中的字符串是什么字符集?出现乱码一定是字符集出了错回复<aclass='referer'target='_blank'>@JayKong:也许字段不是utf8呢UTF8用下mysql_real_escape_string试试呢尝试过无解

    肯定是字符集的问题。

    1、要么是数据库整体的字符集

    2、要么是字段的字符集

    3、要么是程序编码的字符集

    一步步排解

    文件系统的名称编码是GBK么?比如xp系统
    回复<aclass='referer'target='_blank'>@Jason阿坚:数据库是UTF8,不转码当然会出错是发出程序或debug看看setnamesutf8

    2020-06-22 21:54:29
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载