PHP读到txt中文字符串比较失败

       最近开始做PHP。今天从txt文件中读取一个中文字符串,跟一个字符串作比较,老是匹配失败,开始以为是编码问题,因为我的PHP文件编码是utf-8,遂将txt文件的编码也改成utf-8,好,噩梦来了...

    我将读到的字符串原样输出,完全没有问题,跟预期的一模一样,可是一做字符串比较就比较失败。我读到的字符串是$str = '帐号',但是当我做if($str == '帐号')的时候返回的总是false。

    于是我尝试将读到的字符串长度用mb_strlen($str, ‘utf-8’)打出来,神奇啊!我明明输入的是两个字符,可打出来居然有3个字符!我左看右看上看下看就是找不到多出来的字符。。。

    然后我用$str = str_replace('帐号', '', $str);再将$str打出来,结果为空,但所占的字符长度却是1,完全不知道这个是什么

    最后我用echo urlencode($str);打出来,罪魁祸首出现了!得到的值是%EF%BB%BF!这到底是个什么东东?百度之...

    原来,这是BOM(Byte Order Mark),是UTF编码方案里用于标识编码的标准标记微软在自己的UTF-8格式的文本文件之前加上了EF BB BF三个字节, windows上面的notepad等程序就是根据这三个字节来确定一个文本文件是ASCII的还是UTF-8的, 然而这个只是微软暗自作的标记, 其它平台上并没有对UTF-8文本文件做个这样的标记。

    于是乎,将原来的$str做一个替换,$str = str_replace(urldecode('%EF%BB%BF'), '', $str);搞定!

    在这里,要非常感谢wintion童鞋帮我找错误,不然估计一直头大如斗呢。关于BOM在网友的blog里有详细介绍,就不赘述了,给个链接吧http://blog.163.com/result_2205/blog/static/13981945020102954023564/

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值