欢迎来到千学网!
您现在的位置:首页 > 实用文 > 其他范文

PHP截取中文字符串方法总结

时间:2023-09-26 08:55:22 其他范文 收藏本文 下载本文

下面是小编为大家整理的PHP截取中文字符串方法总结,本文共12篇,仅供参考,大家一起来看看吧。

PHP截取中文字符串方法总结

篇1:PHP截取中文字符串方法总结

程序一:PHP截取中文字符串方法

由于网站首页以及vTigerCRM里经常在截取中文字符串时出现乱码(使用substr),今天找到一个比较好的截取中文字符串方法,在此与大家共享,

function msubstr($str, $start, $len) {

$tmpstr = “”;

$strlen = $start + $len;

for($i = 0; $i < $strlen; $i++) {

if(ord(substr($str, $i, 1)) >0xa0) {

$tmpstr .= substr($str, $i, 2);

$i++;

} else

$tmpstr .= substr($str, $i, 1);

}

return $tmpstr;

}

程序二:PHP截取UTF-8字符串,解决半字符问题

/******************************************************************

* PHP截取UTF-8字符串,解决半字符问题。

* 英文、数字(半角)为1字节(8位),中文(全角)为3字节

* @return 取出的字符串, 当$len小于等于0时, 会返回整个字符串

* @param $str 源字符串

* $len 左边的子串的长度

****************************************************************/

function utf_substr($str,$len)

{

for($i=0;$i<$len;$i++)

{

$temp_str=substr($str,0,1);

if(ord($temp_str) >127)

{

$i++;

if($i<$len)

{

$new_str[]=substr($str,0,3);

$str=substr($str,3);

}

}

else

{

$new_str[]=substr($str,0,1);

$str=substr($str,1);

}

}

return join($new_str);

}

?>

php utf-8 字符串截取

function cutstr($string, $length) {

preg_match_all(“/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/”, $string, $info);

for($i=0; $i

$wordscut .= $info[0][$i];

$j = ord($info[0][$i]) >127 ? $j + 2 : $j + 1;

if ($j >$length - 3) {

return $wordscut.“ ...”;

}

}

return join('', $info[0]);

}

$string=“242432反对感是456犯得上广泛大使馆地方7890”;

for($i=0;$i

{

echo cutstr($string,$i).“

”;

}

?>

截取utf-8字符串函数

为了支持多语言,数据库里的字符串可能保存为UTF-8编码,在网站开发中可能需要用php截取字符串的一部分。为了避免出现乱码现象,编写如下的UTF-8字符串截取函数

关于utf-8的原理请看 UTF-8 FAQ

UTF-8编码的字符可能由1~3个字节组成, 具体数目可以由第一个字节判断出来,

(理论上可能更长,但这里假设不超过3个字节)

第一个字节大于224的,它与它之后的2个字节一起组成一个UTF-8字符

第一个字节大于192小于224的,它与它之后的1个字节组成一个UTF-8字符

否则第一个字节本身就是一个英文字符(包括数字和一小部分标点符号)。

以前为某网站设计的代码(也是现在用在首页的长度截取的函数)

//$sourcestr 是要处理的字符串

//$cutlength 为截取的长度(即字数)

function cut_str($sourcestr,$cutlength)

{

$returnstr='';

$i=0;

$n=0;

$str_length=strlen($sourcestr);//字符串的字节数

while (($n<$cutlength) and ($i<=$str_length))

{

$temp_str=substr($sourcestr,$i,1);

$ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii码

if ($ascnum>=224) //如果ASCII位高与224,

{

$returnstr=$returnstr.substr($sourcestr,$i,3); //根据UTF-8编码规范,将3个连续的字符计为单个字符

$i=$i+3; //实际Byte计为3

$n++; //字串长度计1

}

elseif ($ascnum>=192) //如果ASCII位高与192,

{

$returnstr=$returnstr.substr($sourcestr,$i,2); //根据UTF-8编码规范,将2个连续的字符计为单个字符

$i=$i+2; //实际Byte计为2

$n++; //字串长度计1

}

elseif ($ascnum>=65 && $ascnum<=90) //如果是大写字母,

{

$returnstr=$returnstr.substr($sourcestr,$i,1);

$i=$i+1; //实际的Byte数仍计1个

$n++; //但考虑整体美观,大写字母计成一个高位字符

}

else //其他情况下,包括小写字母和半角标点符号,

{

$returnstr=$returnstr.substr($sourcestr,$i,1);

$i=$i+1; //实际的Byte数计1个

$n=$n+0.5; //小写字母和半角标点等与半个高位字符宽...

}

}

if ($str_length>$cutlength){

$returnstr = $returnstr . “...”;//超过长度时在尾处加上省略号

}

return $returnstr;

}

截取utf-8字符串函数

function FSubstr($title,$start,$len=“”,$magic=true)

{

if($len == “”) $len=strlen($title);

if($start != 0)

{

$startv = ord(substr($title,$start,1));

if($startv >= 128)

{

if($startv < 192)

{

for($i=$start-1;$i>0;$i--)

{

$tempv = ord(substr($title,$i,1));

if($tempv >= 192) break;

}

$start = $i;

}

}

}

if(strlen($title)<=$len) return substr($title,$start,$len);

篇2:linux中shell截取字符串方法总结linux操作系统

shell中截取字符串的方法有很多中,可以分为两大类,第一种获取特定的字符或字符串的左边或者右边的字字符串,java中实现需要先用indexOf来确定特定字符串的位置,然后再用substring来获取结果;第二种类似java中的substring

shell中截取字符串的方法有很多中,

${expression}一共有9种使用方法。

${parameter:-word}

${parameter:=word}

${parameter:?word}

${parameter:+word}

上面4种可以用来进行缺省值的替换。

${#parameter}

上面这种可以获得字符串的长度。

${parameter%word} 最小限度从后面截取word

${parameter%%word} 最大限度从后面截取word

${parameter#word} 最小限度从前面截取word

${parameter##word} 最大限度从前面截取word

上面4个就是用来截取字符串的方法了。

有了着四种用法就不必使用cut命令来截取字符串了

第一种又可以分为四种情况,下面一一介绍。

1、使用 # 号操作符。用途是从左边开始删除第一次出现子字符串即其左边字符,保留右边字符。用法为#*substr,例如:

str='www.你的域名.com/cut-string.html'

echo ${str#*//}

得到的结果为www.你的域名.com/cut-string.html,即删除从左边开始到第一个“//”及其左边所有字符2、使用 ## 号操作符。用途是从左边开始删除最后一次出现子字符串即其左边字符,保留右边字符。用法为##*substr,例如:

str='www.你的域名.com/cut-string.html'

echo ${str##*/}

得到的结果为cut-string.html,即删除最后出现的“/”及其左边所有字符3、使用 % 号操作符。用途是从右边开始删除第一次出现子字符串即其右边字符,保留左边字符。用法为%substr*,例如:

str='www.你的域名.com/cut-string.html'

echo ${str%/*}

得到的结果为www.你的域名.com,即删除从右边开始到第一个“/”及其右边所有字符4、使用 %% 号操作符。用途是从右边开始删除最后一次出现子字符串即其右边字符,保留左边字符。用法为%%substr*,例如:

str='www.你的域名.com/cut-string.html'

echo ${str%%/*}

得到的结果为www.你的域名.com,即删除从右边开始到最后一个“/”及其右边所有字符第二种也分为四种,分别介绍如下:

1、从左边第几个字符开始以及字符的个数,用法为:start:len,例如:

str='www.你的域名.com/cut-string.html'

echo ${var:0:5}

其中的 0 表示左边第一个字符开始,5 表示字符的总个数。

结果是:http:2、从左边第几个字符开始一直到结束,用法为:start,例如:

str='www.你的域名.com/cut-string.html'

echo ${var:7}

其中的 7 表示左边第8个字符开始

结果是:www.你的域名.com/cut-string.html3、从右边第几个字符开始以及字符的个数,用法:0-start:len,例如:

str='www.你的域名.com/cut-string.html'

echo ${str:0-15:10}

其中的 0-6 表示右边算起第6个字符开始,10 表示字符的个数,

结果是:cut-string3、从右边第几个字符开始一直到结束,用法:0-start,例如:

str='www.你的域名.com/cut-string.html'

echo ${str:0-4}

其中的 0-6 表示右边算起第6个字符开始,10 表示字符的个数。

结果是:html注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)

网上其它参考内容

一、Linux shell 截取字符变量的前8位,有方法如下:

1.expr substr “$a” 1 8

2.echo $a|awk ‘{print substr(,1,8)}’

3.echo $a|cut -c1-8

4.echo $

5.expr $a : ‘(.\).*’

6.echo $a|dd bs=1 count=8 2>/dev/null

二、按指定的字符串截取

1、第一种方法:

${varible##*string} 从左向右截取最后一个string后的字符串

${varible#*string}从左向右截取第一个string后的字符串

${varible%%string*}从右向左截取最后一个string后的字符串

${varible%string*}从右向左截取第一个string后的字符串

“*”只是一个通配符可以不要

例子:

$ MYVAR=foodforthought.jpg

$ echo ${MYVAR##*fo}

rthought.jpg

$ echo ${MYVAR#*fo}

odforthought.jpg

2、第二种方法:${varible:n1:n2}:截取变量varible从n1到n2之间的字符串。

可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。试着在 bash 中输入以下行:

$ EXCLAIM=cowabunga

$ echo ${EXCLAIM:0:3}

cow

$ echo ${EXCLAIM:3:7}

abunga

这种形式的字符串截断非常简便,只需用冒号分开来指定起始字符和子字符串长度。

三、按照指定要求分割:

比如获取后缀名

ls -al | cut -d “.” -f2

篇3:shell编程中的字符串截取方法小结

这篇文章主要介绍了shell编程中的字符串截取方法小结,本文讲解了截取字符变量的前8位的方法、按指定的字符串截取方法、按照指定要求分割方法等内容,需要的朋友可以参考下

一、Gnu Linux shell 截取字符变量的前8位,有方法如下:

1.expr substr “$a” 1 8

2.echo $a|awk ‘{print substr(,1,8)}‘

3.echo $a|cut -c1-8

4.echo $

5.expr $a : ‘\(.\\).*‘

6.echo $a|dd bs=1 count=8 2>/dev/null

二、按指定的字符串截取

1、第一种方法:

${varible##*string} 从左向右截取最后一个string后的字符串

${varible#*string}从左向右截取第一个string后的字符串

${varible%%string*}从右向左截取最后一个string后的字符串

${varible%string*}从右向左截取第一个string后的字符串

“*”只是一个通配符可以不要

例子:

代码如下:

$ MYVAR=foodforthought.jpg

$ echo ${MYVAR##*fo}

rthought.jpg

$ echo ${MYVAR#*fo}

odforthought.jpg

2、第二种方法:${varible:n1:n2}:截取变量varible从n1到n2之间的字符串,

shell编程中的字符串截取方法小结

可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。试着在 bash 中输入以下行:

代码如下:

$ EXCLAIM=cowabunga

$ echo ${EXCLAIM:0:3}

cow

$ echo ${EXCLAIM:3:7}

abunga

这种形式的字符串截断非常简便,只需用冒号分开来指定起始字符和子字符串长度。

三、按照指定要求分割:

比如获取后缀名

代码如下:

ls -al | cut -d “.” -f2

篇4:Go语言按字节截取字符串的方法

作者:不吃皮蛋 字体:[增加 减小] 类型:

这篇文章主要介绍了Go语言按字节截取字符串的方法,涉及Go语言操作字符串的技巧,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了Go语言按字节截取字符串的方法,分享给大家供大家参考。具体实现方法如下:

代码如下:

// 按字节截取字符串 utf-8不乱码

func SubstrByByte(str string, length int) string {

bs := []byte(str)[:length]

bl := 0

for i:=len(bs)-1; i>=0; i-- {

switch {

case bs[i] >= 0 && bs[i] <= 127:

return string(bs[:i+1])

case bs[i] >= 128 && bs[i] <= 191:

bl++;

case bs[i] >= 192 && bs[i] <= 253:

cl := 0

switch {

case bs[i] & 252 == 252:

cl = 6

case bs[i] & 248 == 248:

cl = 5

case bs[i] & 240 == 240:

cl = 4

case bs[i] & 224 == 224:

cl = 3

default:

cl = 2

}

if bl+1 == cl {

return string(bs[:i+cl])

}

return string(bs[:i])

}

}

return “”

}

希望本文所述对大家的Go语言程序设计有所帮助,

篇5:自己写的php中文截取函数mbstrlen和mbsubstr

这篇文章主要介绍了自己写的php中文截取函数mb_strlen和mb_substr,在服务器没mbstring库时可以使用本文函数代替,需要的朋友可以参考下

众所周知,php 自带的 strlen 与 substr 函数没法处理中文字符,于是,我们会用 mb_ 系列函数替代,但是,没有 mbstring 库怎么办?这就需要我们自己写一个来替代了,废话不多说,先上代码:

代码如下:

if ( !function_exists(‘mb_strlen‘) ) {

function mb_strlen ($text, $encode) {

if ($encode==‘UTF-8‘) {

return preg_match_all(‘%(?:

[\x09\x0A\x0D\x20-\x7E]          # ASCII

| [\xC2-\xDF][\x80-\xBF]           # non-overlong 2-byte

| \xE0[\xA0-\xBF][\x80-\xBF]      # excluding overlongs

| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte

| \xED[\x80-\x9F][\x80-\xBF]      # excluding surrogates

| \xF0[\x90-\xBF][\x80-\xBF]{2}   # planes 1-3

| [\xF1-\xF3][\x80-\xBF]{3}        # planes 4-15

| \xF4[\x80-\x8F][\x80-\xBF]{2}   # plane 16

)%xs‘,$text,$out);

}else{

return strlen($text);

}

}

}

/* from Internet, author unknown */

if (!function_exists(‘mb_substr‘)) {

function mb_substr($str, $start, $len = ‘‘, $encoding=“UTF-8”){

$limit = strlen($str);

for ($s = 0; $start >0;--$start) {// found the real start

if ($s >= $limit)

break;

if ($str[$s] <= “\x7F”)

++$s;

else {

++$s; // skip length

while ($str[$s] >= “\x80” && $str[$s] <= “\xBF”)

++$s;

}

}

if ($len == ‘‘)

return substr($str, $s);

else

for ($e = $s; $len >0; --$len) {//found the real end

if ($e >= $limit)

break;

if ($str[$e] <= “\x7F”)

++$e;

else {

++$e;//skip length

while ($str[$e] >= “\x80” && $str[$e] <= “\xBF” && $e < $limit)

++$e;

}

}

return substr($str, $s, $e - $s);

}

}

篇6:go语言按显示长度截取字符串的方法

作者:不吃皮蛋 字体:[增加 减小] 类型:

根据显示长度截取字符串,之前php用的utf8编码,10个英文和10个汉字的显示长度差距太大,按字节截取的话又会出错出现截取半个汉字的情况,所以写了这两个函数.

这两天在折腾golang,所以就用golang重写了着连个函数.代码如下:

代码如下:

package main

import (

“fmt”

)

func main {

fmt.Println(show_strlen(“哈哈1”))

fmt.Println(show_substr(“哈哈1什1么的”, 9))

}

根绝显示长度截取字符串

代码如下:

func show_substr(s string, l int) string {

if len(s) <= l {

return s

}

ss, sl, rl, rs := “”, 0, 0, []rune(s)

for _, r := range rs {

rint := int(r)

if rint < 128 {

rl = 1

} else {

rl = 2

}

if sl + rl >l {

break

}

sl += rl

ss += string(r)

}

return ss

}

根据字符串显示获取显示长度

代码如下:

func show_strlen(s string) int {

sl := 0

rs := []rune(s)

for _, r := range rs {

rint := int(r)

if rint < 128 {

sl++

} else {

sl += 2

}

}

return sl

}

希望本文所述对大家的Go语言程序设计有所帮助,

篇7:小胖学PHP总结4PHP的字符串操作

1.字符串连接

字符串是通过半角句号“.”来连接的,可以把两个或两个以上的字符串连接成一个字符串,

2.去除字符串首尾空格和特殊字符

PHP中提供了trim()函数去除字符串左右两边的空格和特殊字符,ltrim()函数去除字符串左边的空格和特殊字符,rtrim()函数是去除字符串右边的空格和特殊字符。