导航:首页 > 编程语言 > php中英文字符串截取

php中英文字符串截取

发布时间:2022-09-06 01:45:14

php 如何实现按字数分割中英文混杂字符串成数组

以下是我编写的代码,实现对中英文混杂字符进行分割:

<?php
function mbStrSplit ($string, $len=1) {
$start = 0;
$strlen = mb_strlen($string);
while ($strlen) {
$array[] = mb_substr($string,$start,$len,"utf8");
$string = mb_substr($string, $len, $strlen,"utf8");
$strlen = mb_strlen($string);
}
return $array;
}

header('Content-type:text/html;charset=utf-8');
$str = '我爱北京3我爱上海-我爱xianggang';
$r = mbStrSplit($str, 4);
echo '<pre>';
print_r($r);
echo '</pre>';
?>

运行结果:

Array
(
[0] => 我爱北京
[1] => 3我爱上
[2] => 海-我爱
[3] => xian
[4] => ggan
[5] => g
)

⑵ php分割中英文字符串的几种方

对一段文字按照字数进行分割,因为文字中可能是中英文混合的,而php函数strlen只能计算出字串的字节数,于是自己实现了几个函数,分享下。
例1,计算字符总长度。
01<?php
02functionccStrLen($str)#计算中英文混合<ahref="/"target="_blank"class="infotextkey">字符串</a>的长度
03{
04$ccLen=0;
05$ascLen=strlen($str);
06$ind=0;
07$hasCC=ereg(”[xA1-xFE]“,$str);#判断是否有汉字
08$hasAsc=ereg(”[x01-xA0]“,$str);#判断是否有ASCII字符
09if($hasCC&&!$hasAsc)#只有汉字的情况
10returnstrlen($str)/2;
11if(!$hasCC&&$hasAsc)#只有Ascii字符的情况
12returnstrlen($str);
13for($ind=0;$ind<$ascLen;$ind++)
14{
15if(ord(substr($str,$ind,1))>0xa0)
16{
17$ccLen++;
18$ind++;
19}
20else
21{
22$ccLen++;
23}
24}
25return$ccLen;
26}
27?>
例2,从左侧截取字符串。
01<?php
02functionccStrLeft($str,$len)#从左边截取中英文混合字符串
03{
04$ascLen=strlen($str);if($ascLen<=$len)return$str;
05$hasCC=ereg(”[xA1-xFE]“,$str);#同上
06$hasAsc=ereg(”[x01-xA0]“,$str);
07if(!$hasCC)returnsubstr($str,0,$len);
08if(!$hasAsc)
09if($len&0×01)#如果长度是奇数
10returnsubstr($str,0,$len+$len-2);
11else
12returnsubstr($str,0,$len+$len);
13$cind=0;$flag=0;$reallen=0;//实际取字节长
14while($cind<$ascLen&&$reallen<$len)
15{//bywww.jbxue.com
16if(ord(substr($str,$cind,1))<0xA1){//如果该字节为英文则加一
17$cind++;
18}else{//否则加2个字节
19$cind+=2;
20}
21$reallen++;
22}
23returnsubstr($str,0,$cind);
24}
25?>
例3,把给定文字,按切割数量存入数组(适合短篇文字,长文章可没分隔一部分就直接处理一次)
viewsourceprint?
01<?php
02functionSplitContent($content,$smslen){
03$str_tmp=$content;
04$arr_cont=array();
05$len_tmp=0;
06$i=0;//分割绝对位置
07while(strlen($str_tmp)>0){
08$str_tmp=ccStrLeft($str_tmp,$smslen);
09array_push($arr_cont,$str_tmp);
10$i+=strlen($str_tmp);
11$str_tmp=substr($content,$i,strlen($content));
12}
13return$arr_cont;
14}//bywww.jbxue.com
15?>
测试:
1<?php
2$str=’a计算中英文混合1234字符串的长度abcd’;
3echo$str.’的长度为:’.ccStrLen($str);
4echo‘<br>’;
5$smslen=3;//截取长度
6print_r(SplitContent($str,$smslen));
7?>

⑶ php截取字符串方法

可以使用substr或者mb_substr截取字符串

⑷ PHP指定截取字符串中的中英文或数字字符的实例分享

我们在开发过程中,经常会碰到截取中文英文数字等的问题,大家知道中文所占的字符和英文数字是不同的;然后我们就会在项目的common里写一些日常的函数包含时间计算转换和中英文字符截取的函数;比如截取中英文的函数没个几行代码恐怕拿不下来的吧,现在就告诉大家一个简单的(自己本地运行过的),如有问题,请大家多多指教

$c
=
'ddaabbccaa';
$d
=
'地球需要我们每个人的爱护';
$frist1
=
mb_substr(
$c,
0,
1
,"UTF-8");
//
d
$delete_last1
=
mb_substr($d,
-1,1,"UTF-8");
//

echo
$frist1.'+++'.$delete_last1.'<br/>';
//
d+++护
$frist2
=
mb_substr(
$d,
0,
1
,"UTF-8");
//

$delete_last2
=
mb_substr($d,
-1,1,"UTF-8");
//

echo
$frist2.'+++'.$delete_last2.'<br/>';
//
地+++护
$e
=
'11aa22cc33';
$f
=
'aa地球需要我们每个人的爱护';
$g
=
'地球需要我们每个人的爱护gg';
$h
=
'地球需要我们每个人的爱护';
$first3
=
mb_substr(
$e,
0,
1
,"UTF-8");
//
1
$last3
=
mb_substr(
$f,
0,
1
,"UTF-8");
//
a
$delete_last3
=
mb_substr($f,
-1,1,"UTF-8");
//

$delete_last4
=
mb_substr($g,
-1,1,"UTF-8");
//
g
$frist4
=
mb_substr(
$g,
0,
1
,"UTF-8");
//

$delete_last5
=
mb_substr($h,
-1,1,"UTF-8");
//

echo
$first3.'+++'.$last3.'---'.$delete_last3.'***'.$delete_last4.'&&&'.$frist4.'<br/>';
//
1+++a---护***g&&&地
echo
$last3.'...'.$delete_last3.'<br/>';
//
a...护
echo
$frist4.'...'.$delete_last5.'<br/>';
//
地...护
//
这样不管字符串里是中英文数字等都是可以的无需判断,如:
”地...护“
或者
“地...”
或者
“...护”
PS:过滤字符串中空格的方法
去除字符串首尾中英文空格的方法:
function
mbTrim($str)
{
return
mb_ereg_replace('(^(|
)+|(|
)+$)',
'',
$str);
}
下面的正则验证时过滤掉用户输入的连续空格,包括全角空格和半角空格
$user
=
mb_ereg_replace('^(|
)+',
'',
$user);
$user
=
mb_ereg_replace('(|
)+$',
'',
$user);
$age
=
mb_ereg_replace('^(|
)+',
'',
$age);
$age
=
mb_ereg_replace('(|
)+$',
'',
$age);
$method
=
mb_ereg_replace('^(|
)+',
'',
$method);
$method
=
mb_ereg_replace('(|
)+$',
'',
$method);
$address
=
mb_ereg_replace('^(|
)+',
'',
$address);
$address
=
mb_ereg_replace('(|
)+$',
'',
$address);

⑸ php有没有一种函数能从一个字符串中截取一段出来啊。

substr()和mb_substr()的用法一样,区别只是mb_substr()可以针对中文,就是中英文的字符长度问题,英文占用一个字符,一个汉字占用两个字符。

substr(string,start,length)
其中start的参数

正数 - 在字符串的指定位置开始
负数 - 在从字符串结尾的指定位置开始
0 - 在字符串中的第一个字符处开始
strstr() 函数搜索一个字符串在另一个字符串中的第一次出现
配合这几个函数就可以做到很强大的截取功能。

⑹ php截取字符串之截取utf8或gbk编码的中英文字符串示例

php中自带strlen是返回的字节数,对于utf8编码的中文返回时3个,不满足需求,下面给大家提供一个方法来完成这样的功能
微博的发言有字数限制,其计数方式是,中文算2个,英文算1个,全角字符算2个,半角字符算1个。
php中自带strlen是返回的字节数,对于utf8编码的中文返回时3个,不满足需求。
mb_strlen
可以根据字符集计算长度,比如utf8的中文计数为1,但这不符合微博字数限制需求,中文必须计算为2才可以。
google了下,找到一个discuz中截取各种编码字符的类,改造了下,已经测试通过.其中参数$charset
只支持gbk与utf-8。

代码如下:
$a
=
"s@@你好";
var_mp(strlen_weibo($a,'utf-8'));

结果输出为8,其中字母s计数为1,全角@计数为2,半角@计数为1,两个中文计数为4。源码如下:

代码如下:
function
strlen_weibo($string,
$charset='utf-8')
{

$n
=
$count
=
0;

$length
=
strlen($string);

if
(strtolower($charset)
==
'utf-8')

{

while
($n
<
$length)

{

$currentByte
=
ord($string[$n]);

if
($currentByte
==
9
||

$currentByte
==
10
||

(32
<=
$currentByte
&&
$currentByte
<=
126))

{

$n++;

$count++;

}
elseif
(194
<=
$currentByte
&&
$currentByte
<=
223)

{

$n
+=
2;

$count
+=
2;

}
elseif
(224
<=
$currentByte
&&
$currentByte
<=
239)

{

$n
+=
3;

$count
+=
2;

}
elseif
(240
<=
$currentByte
&&
$currentByte
<=
247)

{

$n
+=
4;

$count
+=
2;

}
elseif
(248
<=
$currentByte
&&
$currentByte
<=
251)

{

$n
+=
5;

$count
+=
2;

}
elseif
($currentByte
==
252
||
$currentByte
==
253)

{

$n
+=
6;

$count
+=
2;

}
else

{

$n++;

$count++;

}

if
($count
>=
$length)

{

break;

}

}

return
$count;

}
else

{

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

{

if
(ord($string[$i])
>
127)

{

$i++;

$count++;

}

$count++;

}

return
$count;

}
}

⑺ php截取字符串函数

$str=implode("|",$arr);
echo $str;
input:
小明|小黑|小天|小白

⑻ 如何在php中截取字符串“xxx

substr(string,start,length)
string表示要截取的对象,start表示从哪个位置开始截取,0表示从头开始,正数表示从这个数的位置后面截取,负数表示从结尾算开始截取的位置,但依然是从左到右截,length表示截取长度.负数表示排除或忽略结尾多少个字符
中文截取
mb_substr( $str, $start, $length, $encoding )
$str,需要截断的字符串
$start,截断开始处,起始处为0
$length,要截取的字数
$encoding,网页编码,如utf-8,一个汉字是3个字节

⑼ php截取字符串

这个问题我回答了好几个了:
/* 截取一定长度的完整的中文字符 */

function cnsubstr($str,$strlen=10) {

if(empty($str)||!is_numeric($strlen)){
return false;
}
if(strlen($str)<=$strlen){
return $str;
}

//得到第$length个字符 并判断是否为非中文 若为非中文
//直接返回$length长的字符串
$last_word_needed=substr($str,$strlen-1,1);
if(!ord($last_word_needed)>128){
$needed_sub_sentence=substr($str,0,$strlen);
return $needed_sub_sentence;
}else{
for($i=0;$i<$strlen;$i++){
if(ord($str[$i])>128){
$i++;
}
}//end of for
$needed_sub_sentence=substr($str,0,$i);
return $needed_sub_sentence;
}
}
直接调用这个函数就可以了。

⑽ PHP自定义函数如何截取中英文字符串代码如下: <php header("content-ty

我记得我回答过类似问题,
function cn_substr($str,$len){
for($q=0;$q<$len;$q++){ //循环
if(ord(substr($str,$q))>0xa0){ //判断 0xa0=160
$tmpstr.=substr($str,$q,3);
$q+=3;
}else{
$tmpstr.=substr($str,$q,1);
}
return $tmpstr;
}
}
echo cn_substr ($str,5);//请在函数外调用

阅读全文

与php中英文字符串截取相关的资料

热点内容
android伸缩控件 浏览:851
androidm3u8缓存 浏览:234
imphp开源知乎 浏览:706
清除网络通配符dos命令 浏览:837
鸿蒙系统怎么快速换回安卓 浏览:712
pdf绿色虚拟打印机 浏览:213
androidtab框架 浏览:147
java转php的时间戳 浏览:639
编译libstdc依赖 浏览:659
清算法人与原法人的区别 浏览:410
家庭装修下载什么app软件 浏览:576
美食博主用什么app拍视频 浏览:817
ipone手机如何加密微信 浏览:358
自来水加密阀阀帽 浏览:438
华为交换机dhcp配置命令 浏览:319
androidbitmap缩小 浏览:275
单片机串口控制灯 浏览:88
大讯云服务器安装视频 浏览:788
华为算法领先世界 浏览:658
linux路由重启 浏览:570