PHP 字符串怎么截取

生活里我们常需要“掐掉多余内容”,比如发朋友圈想把过长的文本缩成“…更多”,做电商网站时只显示商品简介前100字,这其实就是“字符串截取”——把一段连续的文字按需求切掉多余部分,留下需要的内容。对用PHP做网站的开发者来说,字符串截取是高频操作,但很多人总搞不清怎么用最方便、不出错。

最常用:按字符数截取(适合纯中文/纯英文)

先讲最基础的用法,PHP自带的substr()函数就是干这个的,它就像“按个数剪绳子”——你说要剪前N个字符,它就给你留前N个,剩下的剪掉。

PHP 字符串怎么截取

举个生活化的例子:你把“今天去超市买苹果和香蕉”这段文字当成一根绳子,substr("今天去超市买苹果和香蕉", 0, 7),就是从第0位(也就是开头)开始数7个字符,剪出来的结果就是“今天去超市买”。

它的格式很好记:substr(要处理的字符串, 开始位置, 要取的长度),开始位置从0数起,是编程里的常规操作。

不过它有个小缺点:如果是中英文混排,比如“我爱吃apple”,它会把每个字母都算1个字符,如果你取5个,结果会是“我爱吃app”——把“apple”拆得稀碎,看着就很别扭。所以如果内容是纯中文或者纯英文,用它完全没问题,简单快捷。

更贴心:按字数截取(适合中英文混排)

要是遇到中英文混排的场景,就可以用mb_substr()函数,它的“单位”是“一个字”,不管是中文、英文还是标点,都算1个单位,不会乱拆单词。

还是刚才的例子,“我爱吃apple”,用mb_substr("我爱吃apple", 0, 5),取5个单位的话,结果就是“我爱吃app”——不对?哦,等下,“我、爱、吃、a、p”?不对,应该是5个单位的话,“我(1)、爱(2)、吃(3)、a(4)、p(5)”,结果是“我爱吃ap”,刚好完整截取到第5个,不会把单词拆成一半。

这个函数比substr()多了个“mb”前缀,意思是“多字节”,专门处理不同语言的字符编码,比如中文通常是2字节,英文是1字节,它能自动识别,不会出现半个字的尴尬。日常做网站时,中英文混排的情况很多,这个函数才是更常用的选择。

细节避坑:别让“截断处”变成乱码

很多人用截取函数时,会忽略一个小细节:如果截取的位置刚好卡在一个多字节字符的中间,就会出现乱码。

举个例子,中文“苹”字是2字节,如果用substr("苹果是红的", 2, 1),从第2位(也就是“苹”字的第二个字节)开始取1个,就会只取到半个“苹”字,变成乱码。而mb_substr()会自动识别中文的字节结构,只会从一个完整字符的开头开始截取,不会出这种问题。

所以记住:只要涉及中文,不管是不是混排,都优先用mb_substr(),别用substr(),能少踩80%的坑。

进阶需求:截取后加“省略号”

平时做电商列表、新闻摘要时,截取完内容还要加个“…”,告诉用户后面还有内容,怎么加?

可以先把截取好的内容存起来,再拼接省略号。比如先取前20个字符:$short = mb_substr($content, 0, 20);,然后判断如果原内容比20个长,就加“…”:$short .= (mb_strlen($content) > 20) ? '...' : '';。

这样做出来的效果,就和你刷短视频时看到的“标题太长自动加…更多”一模一样,既简洁又符合用户习惯。

总结一下,PHP里的字符串截取其实没那么复杂:纯内容用substr(),中英文混排或有中文用mb_substr(),加省略号就拼接一段判断代码,掌握这几个小技巧,日常开发里的截取需求基本都能搞定。

上一篇 C / C++编程语言入门核心知识:从基础语法到高效编程的实用科普