免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3593 | 回复: 8
打印 上一主题 下一主题

php截取中文的函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-30 10:59 |只看该作者 |倒序浏览
我知道有个叫mb_substr()
但是会有乱码。

论坛徽章:
0
2 [报告]
发表于 2012-10-30 11:00 |只看该作者
求解决啊!希望高手帮我解决mb_substr截取中文乱码问题。

论坛徽章:
0
3 [报告]
发表于 2012-10-30 12:42 |只看该作者
  1. <?php
  2. /**
  3. * 字符串截取,支持中文和其他编码
  4. *
  5. * @param string $str 需要转换的字符串
  6. * @param string $start 开始位置
  7. * @param string $length 截取长度
  8. * @param string $charset 编码格式
  9. * @param string $suffix 截断字符串后缀
  10. * @return string
  11. */
  12. function substr_ext($str, $start=0, $length, $charset="utf-8", $suffix="")
  13. {
  14.     if(function_exists("mb_substr")){
  15.          return mb_substr($str, $start, $length, $charset).$suffix;
  16.         }
  17.     elseif(function_exists('iconv_substr')){
  18.          return iconv_substr($str,$start,$length,$charset).$suffix;
  19.     }
  20.     $re['utf-8']  = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
  21.     $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
  22.     $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
  23.     $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
  24.     preg_match_all($re[$charset], $str, $match);
  25.     $slice = join("",array_slice($match[0], $start, $length));
  26.     return $slice.$suffix;
  27. }
复制代码
mb_substr截取乱码,那是因为你没有对应好的php文件编码与函数编码参数.

论坛徽章:
0
4 [报告]
发表于 2012-10-30 14:18 |只看该作者
satrun7 发表于 2012-10-30 12:42
mb_substr截取乱码,那是因为你没有对应好的php文件编码与函数编码参数.


哦原来如此啊,知道啦,先谢谢啦

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
5 [报告]
发表于 2012-10-30 15:14 |只看该作者
不是mb函数不好用, 是因为你不知道自己的文件是什么编码而已.

论坛徽章:
0
6 [报告]
发表于 2012-10-30 15:41 |只看该作者
请您赐教一下啦! 回复 5# linux_c_py_php


   

论坛徽章:
0
7 [报告]
发表于 2012-11-08 11:29 |只看该作者
查询数据库中uname有重复的:select uname,count(uid)  from user   group by uname having count

(uid)>1
按照 两个字段降序:select * from bbs_topic order by top desc,ctime desc limit 6
替换指定字段的指定字符串:
update space_info set baseinfo=replace(baseinfo ,'baidu.com','123456.abc') where baseinfo

like '%baidu.com%';
查看表结构:
show create table tablename;
查看主机
show databases;
show tables;

mysql -h 127.0.0.1 -uroot -pbaidu;(注意中间-u,-p无空格)

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
8 [报告]
发表于 2012-11-10 11:09 |只看该作者
你必须知道你要操作的字符串的编码, 否则mb是没法使用的, 但mb提供了一个猜编码的函数, 你可以体验一下.

论坛徽章:
0
9 [报告]
发表于 2012-11-12 00:24 |只看该作者
string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )

第四个参数就是你当前字符串的编码。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP