文档章节

PHP中substr() mb_substr() mb_struct()的区别和用法及Smar...

sco
 sco
发布于 2012/10/07 21:32
字数 737
阅读 602
收藏 2

PHP substr(),mb_substr()及mb_strcut的区别和用法及Smarty模板中的truncate调节器浅谈

PHP substr() 函数可以  分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mb_substr()/mb_strcut这个函 数,mb_substr()  /mb_strcut的用法与substr()相似,只是在mb_substr()/mb_strcut最后要加入多一个 参数,以设定字符串的编码,但是  一般的服务器都没打开php_mbstring.dll,需要在php.ini在把php_mbstring.dll 打开。

举个例子:
<?php
echo mb_substr('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');
?>
输出:这样一来我的字
<?php
echo mb_strcut('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');
?>
输出:这样一
从上面的例子可以看出,mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,但是都不会产生半个字符的现象……

mbstring 函数的说明:

php的mbstring扩展模块提供了多字节字符的处理能力,平常最常用的就是用mbstring来切分多字节的中文字符,这样可以避免出现半个字符的情况,由于是php的扩展,它的性能也要比一些自定义的多字节切分函数要好上一些。

mbstring extension提供了几个功能类似的函数,mb_substr和mb_strcut,看看手册上对它们的解释。

mb_substr
mb_substr() returns the portion of str specified by the start and length parameters.

mb_substr() performs multi-byte safe  substr() operation based on number of characters. Position is counted  from the beginning of str. First character's position is 0. Second  character position is 1, and so on.

mb_strcut
mb_strcut() returns the portion of str specified by the start and length parameters.

mb_strcut() performs equivalent operation as  mb_substr() with different method. If start position is multi-byte  character's second byte or larger, it starts from first byte of  multi-byte character.

It subtracts string from str that is shorter  than length AND character that is not part of multi-byte string or not  being middle of shift sequence.

再举个例子,有一段文字, 分别用mb_substr和mb_strcut来做切分:

PLAIN TEXT
CODE: 
<?php
$str = '我是一串比较长的中文-www.webjx.com';

echo "mb_substr:" . mb_substr($str, 0, 6, 'utf-8');

echo "<br>";

echo "mb_strcut:" . mb_strcut($str, 0, 6, 'utf-8');
?>
输出结果如下:

mb_substr:我是一串比较//按字符来截取,一个英文字母、一个汉字都是一个字符
mb_strcut:我是//按字节数截取,一个汉字是3个字节数

note:在使用smarty模板时 可能会用到truncate这个调节器来截取字符串,此时当们截取的字符串中有中文时就会出现乱码现象(在变长编码下,通常都是以字符个数而不是以字节个数来衡量字符串的长度的),这时我们可以自己定义一个变量调节器按照字符数量来截取字符串。方法:1.在php中ord()函数获得字符的ascii码 2.根据ascii码用substr()函数来截取字符串这样有中文也不会出现乱码了。

© 著作权归作者所有

共有 人打赏支持
sco

sco

粉丝 2
博文 3
码字总数 3656
作品 0
海淀
程序员
截取字符串函数substr()、mb_substr()和mb_strcut的区别

PHP截取字符串的函数有:substr() / mbsubstr() / mbstrcut() 这些字符串的区别是什么呢? substr()函数分割包括中文字符往往会遇到乱码问题 而mb_substr()分割中文字符串就不会有乱码问题 ...

jackguo
2014/03/21
0
0
substr(),mb_substr()及mb_strcut的区别和用法

substr()函数可以 分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mbsubstr()/mbstrcut这个函数,mbsubstr() /mbstrcut的用法与substr()相似,只是在mbsubstr()/mbstrc...

桃子红了呐
2017/01/01
0
0
php截取中文字符串长度的mb_substr()、mb_strcut()函数

substr()函数可以用来分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mbsubstr()/mbstrcut这个函数,mbsubstr() /mbstrcut的用法与substr()相似,只是在mbsubstr()/mb...

无牙子
2014/04/08
0
0
mb_substr()----------php

PHP substr()函数可以分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mbsubstr()/mbstrcut这个函数,mbsubstr() /mbstrcut的用法与substr()相似,只是在mbsubstr()/mb...

freedonn
2014/09/12
0
0
解决分割中文时出乱码的方法 mb_substr() or mb_strcut

原因:字符编码的问题,GB2312中文占两个字符,utf-8中文占3个字符,分割的时候要看中文字符是否结束,否则久乱码 解决方法: PHP substr()函数可以 分割文字,但要分割的文字如果包括中文字...

kobe52099
2014/01/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

NIO与BIO的区别、NIO的运行原理和并发使用场景

NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题的...

Java干货分享
39分钟前
1
0
Makefile 学习 1 - 基于若干 Blog 的汇总

基于若干 Blog 汇总的 makefile 教程 陈皓 https://blog.csdn.net/haoel/article/details/2886 Makefile 基础知识 1. 什么是 Makefile? 规定软件工程的编译规则。一个工程中的源文件,其按类...

公孙衍
52分钟前
1
0
72.告警系统邮件引擎 运行告警系统

20.23/20.24/20.25 告警系统邮件引擎 20.26 运行告警系统 20.23/20.24/20.25 告警系统邮件引擎 邮件首先要有一个mail.py,以下。 因为我们之前zabbix的时候做过,就可以直接拷贝过来 mail.s...

王鑫linux
今天
1
0
09-利用思维导图梳理JavaSE-

09-利用思维导图梳理JavaSE-Java IO流 主要内容 1.Java IO概述 1.1.定义 1.2.输入流 - InputStream 1.3.输出流 - OutputStream 1.4.IO流的分类 1.5.字符流和字节流 2.InputStream类 2.1.File...

飞鱼说编程
今天
3
0
Spring Cloud 微服务的那点事

在详细的了解SpringCloud中所使用的各个组件之前,我们先了解下微服务框架的前世今生。 单体架构 在网站开发的前期,项目面临的流量相对较少,单一应用可以实现我们所需要的功能,从而减少开...

我是你大哥
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部