php 截取字符串中的英文,PHP截取中英文字符串

本文介绍了如何在PHP中分别针对gb2312和utf-8编码的字符串进行中英文截取,包括自定义函数gbk_str和utf8_str的实现,以及使用内置函数mb_substr的实例。重点展示了不同编码字符处理的方法和mb_substr的多字节安全特性。
摘要由CSDN通过智能技术生成

今天在写网站的时候用到了字符串的中英文截取,特此总结了一下:

1.根据网站的中文编码格式,采取不同的自定义函数。

1)PHP截取gb2312中英文字符串

<?php

//PHP截取gb2312中文字符串

/**

* PHP截取gb2312中文字符串

* @param $str 被截取的字符串

* @param $start 起始长度

* @param $len 截取长度

* @param $suffix 后缀字符串

*/

function gbk_str($str, $start, $len,$suffix=""){

$tmpstr = "";

$n=0;

$length = $start+$len;

echo $length."
";

for($i=0; $i

$value=ord(substr($str,$i,1));

echo $value."--
";

if($value>0xa0){

if($n>=$start && $n

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

}

$i++;

}else{

if($n>=$start && $n

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

}

}

}

return $tmpstr.$suffix;

}

//测试案例

$str = "测试字符串'abcdefg";

echo gbk_str($str,2,9,"...");

显示效果:

字符串'abcde...

2)PHP截取utf-8中英文字符串

原理:

UTF-8编码的字符可能由1~3个字节组成,

具体数目可以由第一个字节判断出来。

第一个字节大于239小于248的,它与它之后的3个字节组成一个UTF-8字符

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

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

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

注意:小写字母和半角标点等与半个高位字符宽

/**

* PHP截取utf-8中文字符串

* @param $str 被截取的字符串

* @param $start 起始长度

* @param $len 截取长度

* @param $suffix 后缀字符串

*/

function utf8_str($str,$start,$len,$suffix=""){

$tmpstr = "";

$n = 0;

$i = 0;

$length = $start+$len;

while($i

$value = ord($str[$i]);

if($value >= 65 && $value <= 90){//大写字母

if($n>=$start && $n

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

}

$n++;

$i++;

}

elseif($value >= 192 && $value <= 223){

if($n>=$start && $n

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

}

$n++;

$i+=2;

}

elseif($value >= 224 && $value <= 239){

if($n>=$start && $n

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

}

$n++;

$i+=3;

}

elseif($value >= 240 && $value <= 247){

if($n>=$start && $n

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

}

$n++;

$i+=4;

}

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

if($n>=$start && $n

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

}

$n += 0.5;

$i++;

}

}

if($n

return $tmpstr;

}else{

return $tmpstr.$suffix;

}

}

//测试案例

$str = "测试字符串'abcdefg";

echo utf8_str($str,2,9,"...");

显示效果:

字符串'abcdefg...

2.使用内置的PHP字符串截取函数,mb_substr()

1.要确保你的Windows/system32下有php_mbstring.dll这个文件,没有就从PHP安装目录extensions里拷入Windows/system32里面。

2.windows下的PHP目录中找到配置文件php.ini并打开,搜索mbstring.dll,找到;extension=php_mbstring.dll把前面的;号去掉

mb_substr — 获取字符串的部分

说明:

string mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] )

根据字符数执行一个多字节安全的 substr() 操作。 位置是从 str 的开始位置进行计数。 第一个字符的位置是 0。第二个字符的位置是 1,以此类推。

参数:

str

从该 string 中提取子字符串。

start

str 中要使用的第一个字符的位置。

length

str 中要使用的最大字符数。 If omitted or NULL is passed, extract all characters to the end of the string.

encoding

encoding 参数为字符编码。如果省略,则使用内部字符编码。

返回值

mb_substr() 函数根据 start 和 length 参数返回 str 中指定的部分。

函数如下:

function mystr($str,$start,$len,$charset,$suffix){

$tmpstr="";

$tmpstr .= mb_substr($str,$start,$len,$charset);

return $tmpstr."...";

}

$str1 = "这是一个悲伤的故事abcdefg";

echo mystr($str1,2,9,"utf-8","...");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值