php字符串截取中英文
㈠ 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截取字符串之截取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中有几个截取字符创的函数
函数名 作用 php版本
chr() 从指定的 ASCII 值返回字符。 3
chunk_split() 把字符串分割为一连串更小的部分。 3
count_chars() 返回字符串所用字符的信息。 4
explode() 把字符串打散为数组。 3
implode() 把数组元素组合为一个字符串。 3
join() implode() 的别名。 3
levenshtein() 返回两个字符串之间的 Levenshtein 距离。 3
localeconv() 返回包含本地数字及货币信息格式的数组。 4
ltrim() 从字符串左侧删除空格或其他预定义字符。 3
md5() 计算字符串的 MD5 散列。 3
md5_file() 计算文件的 MD5 散列。 4
metaphone() 计算字符串的 metaphone 键。 4
money_format() 把字符串格式化为货币字符串。 4
nl_langinfo() 返回指定的本地信息。 4
nl2br() 在字符串中的每个新行之前插入 HTML 换行符。 3
number_format() 通过千位分组来格式化数字。 3
parse_str() 把查询字符串解析到变量中。 3
print() 输出一个或多个字符串。 3
printf() 输出格式化的字符串。 3
similar_text() 计算两个字符串的匹配字符的数目。 3
sprintf() 把格式化的字符串写写入一个变量中。 3
str_ireplace() 替换字符串中的一些字符。(对大小写不敏感) 5
str_replace() 替换字符串中的一些字符。(对大小写敏感) 3
str_split() 把字符串分割到数组中。 5
strcasecmp() 比较两个字符串。(对大小写不敏感) 3
strchr() 搜索字符串在另一字符串中的第一次出现。strstr() 的别名 3
strcspn() 返回在找到任何指定的字符之前,在字符串查找的字符数。 3
stripos() 返回字符串在另一字符串中第一次出现的位置(大小写不敏感) 5
stristr() 查找字符串在另一字符串中第一次出现的位置(大小写不敏感) 3
strlen() 返回字符串的长度。 3
strpbrk() 在字符串中搜索指定字符中的任意一个。 5
strpos() 返回字符串在另一字符串中首次出现的位置(对大小写敏感) 3
strrchr() 查找字符串在另一个字符串中最后一次出现的位置。 3
strripos() 查找字符串在另一字符串中最后出现的位置(对大小写不敏感) 5
strrpos() 查找字符串在另一字符串中最后出现的位置(对大小写敏感) 3
strspn() 返回在字符串中包含的特定字符的数目。 3
strstr() 搜索字符串在另一字符串中的首次出现(对大小写敏感) 3
strtok() 把字符串分割为更小的字符串。 3
strtr() 转换字符串中特定的字符。 3
substr() 返回字符串的一部分。 3
substr_compare() 从指定的开始长度比较两个字符串。 5
substr_count() 计算子串在字符串中出现的次数。 4
substr_replace() 把字符串的一部分替换为另一个字符串。 4
ucwords() 把字符串中每个单词的首字符转换为大写。 3
wordwrap() 按照指定长度对字符串进行折行处理。 4
㈣ 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);