编码

PHP utf-8和gb2312编码转换乱码的问题

经过一时间的 php + mssql,感觉 mssql 对编码的支持不是很好(其实还是自己没有把握好啦),但是又还没有来得急换数据库,只能将就点,今天又在提交数据时出现了错误。

由 于提交的 ntext 字段的内容比较多,大约有 220 KB,所以造成了我的误解,以为是文章太长而引起的错误。我一看 php 配置,发现  php 对 mssql.textsize 的支持已经在 400 K了,怎么还出错?开启错误后才发现,原来不是文章太长,而是编码引起的错误。错误如下:
Notice: iconv() [function.iconv]: Detected an illegal character in input string in...。

 英文实在太烂,只是知道 iconv() 函数出问题。google 翻译,说是输入字符串中检测到非法字符。恍然大悟。

根据错误提示到网上找到问题的解决办法,就是在 iconv() 的第二个参数加个 //IGNORE ,就是忽略错误的意思。代码如下:
iconv("utf-8", "gbk//IGNORE", $str);

测试,提交成功。

php + mssql 中 like 不支持中文关键字查询

今天在做模糊查询时发现在 php + mssql + utf-8 中使用了中文就无数据返回,但是把 sql 句子输出直接到查询分析器里面执行是有数据返回的。由于涉及到中文所以第一时间就想到这是编码影响的,马上把关键字换为英文字母(当然字母是在字段记录中 存在的),就有数据返回。虽然找到原因了,但是解决问题过程中我还是郁闷了半天,我明明都把它们设为 utf-8 编码了,怎么还会出现这问题呢?问题是另外一个表,字段类型跟这个表是一样的,就有数据返回。

尝试了很多方法都无解后,就直接把关键字转了编码,LIKE '%" . iconv('utf-8', 'gbk', $keywords) . "%'" ,这样就成功返回数据了。看来 php 跟 mssql 还真是门不当户不对,我遇到的问题就多多的,加油换数据库吧!

 

订阅RSS - 编码