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是按字节来切分字符,但是都不会产生半个字符的现象再举个例子,有一段文字, 分别用mb_substr和mb_strcut来做切分:

<?php

$str = '我是一串比较长的中文-www.webjx.com';

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

echo "
";

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

?>

输出结果如下:

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

mb_strcut:我是//按字节数截取,一个汉字是3个字节数

不同编码方式1个英文字母占的字节是不同的:

1.ASCII码:一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。
2.UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节
3.Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。中文标点占两个字节,英文标点占两个字节

PHP中substr() mb_substr() mb_struct()的区别和用法的更多相关文章

  1. 简述Linq中.ToList(), .AsEnumerable(), AsQueryable()的区别和用法

    [TOC] 这3个方法的功能完全不同, 应按照具体业务场景使用. AsQueryable() 先说说什么是 IQueryable IQueryable 是当前的 data provider 返回的类型 ...

  2. JS中substr与substring的区别

    js中substr和substring都是截取字符串中子串,非常相近,可以有一个或两个参数. 语法:substr(start [,length]) 第一个字符的索引是0,start必选 length可 ...

  3. 图论中DFS与BFS的区别、用法、详解…

    DFS与BFS的区别.用法.详解? 写在最前的三点: 1.所谓图的遍历就是按照某种次序访问图的每一顶点一次仅且一次. 2.实现bfs和dfs都需要解决的一个问题就是如何存储图.一般有两种方法:邻接矩阵 ...

  4. 图论中DFS与BFS的区别、用法、详解?

    DFS与BFS的区别.用法.详解? 写在最前的三点: 1.所谓图的遍历就是按照某种次序访问图的每一顶点一次仅且一次. 2.实现bfs和dfs都需要解决的一个问题就是如何存储图.一般有两种方法:邻接矩阵 ...

  5. Javascript中substr和substring的区别

    由于在项目中有需要对字符串进行截取,然后手残使用了IDE自动提示的substr,没想那么多以为substr和substring没多大区别. 然而并不是,且听我一一道来. 1. substr(index ...

  6. js中 substr(), substring(), slice()的区别

    一.作用 三者都是基于原字符串创建新字符串的方法. 接收一到两个参数,第一个参数截取字符串的开始位置(字符下标,从0开始),第二个参数因方法不同而不同,后面不同点会说到. 另外,三个方法都不会修改原字 ...

  7. JavaScript 中 substr 和 substring的区别

    http://www.cnblogs.com/meil/archive/2007/01/05/598528.htmlString.substr(N1,N2) 这个就是我们常用的从指定的位置(N1)截取 ...

  8. js中substr,substring,indexOf,lastIndexOf等的用法

    1.substrsubstr(start,length)表示从start位置开始,截取length长度的字符串. var src="images/off_1.png";alert( ...

  9. Javascript中call和apply的区别和用法

    JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别.其实就是更改对象的内部指针,即改变对象的this指向的内容.这在面向对象的js编程过程中有时是很有用的.call ...

  10. CSS中的class与id区别及用法

    转自http://www.divcss5.com/rumen/r3.shtml及http://www.jb51.net/css/35927.html 我们平常在用DIV CSS制作Xhtml网页页面时 ...

随机推荐

  1. Kmesh进入CNCF云原生全景图,实现网格治理sidecarless化

    本文分享自华为云社区<Kmesh进入CNCF 云原生全景图> ,作者:云容器大未来. 近日,Kmesh 正式进入 CNCF 云原生全景图,位于 Service Mesh 类别下. CNCF ...

  2. 自定义Naive UI的数据表格Data Table中按钮Button图标

    在Naive UI官网中详细介绍了[数据表格 Data Table](数据表格 Data Table - Naive UI)的使用方式 { title: "Action", key ...

  3. C# 泛型里使用四则运算的办法,委托的妙用

    直接上代码 public static class TestGenricCalc { public static T Clac<T>(T t1, T t2,Func<T,T,T> ...

  4. C# WPF 坦克大战

    wpf写的.主要是Canvas做画布 和类似的Rectangle的自定义类 采用了画面帧的思想,子弹 坦克移动 效果 都是 在主界面用一个定时器 循环,每秒60帧,这样做的好处,对比我之前做的炸弹人游 ...

  5. Github Fork仓库的冲突与同步管理

    在使用Github进行协作开发时,fork一个仓库并在本地进行开发是常见的工作流程.然而,当源仓库(上游仓库)有了更新时,如何同步这些更新并解决可能的合并冲突是一个关键问题.本文将详细介绍如何管理这些 ...

  6. memo(自带)

    React.memo()是一个高阶函数,它与 React.PureComponent类似,但是一个函数组件而非一个类.如果你的组件在相同 props的情况下渲染相同的结果,那么你可以通过将其包装在 R ...

  7. form表单提交后,页面弹出成功或者失败的信息

    Ssm 中用RedirectAttributes做提示消息` @RequiresPermissions("hic:zybl:hicZybl:edit") @RequestMappi ...

  8. 一款.NET开源、功能强大、跨平台的绘图库 - OxyPlot

    前言 今天大姚给大家分享一款.NET开源(MIT License).免费.跨平台.功能强大的绘图库,支持多平台使用(包括:WPF.UWP.WinForm.Silverlight.Xamarin.iOS ...

  9. 增补博客 第二篇 python 谢宾斯基三角型字符分形图形输出

    SIZE = int(input())# 输入分割次数 SIZE = SIZE<<3 # 将分割次数转为次数 y = SIZE - 1 # 用来控制列数 while y>=0: fo ...

  10. aspose word与pdf互转

    aspose word与pdf互转 package com.example.core.mydemo.aspose; import com.aspose.words.Document; import c ...