首页 >后端开发 >php教程 >substr - PHP - 中英文混排字符串截取函数

substr - PHP - 中英文混排字符串截取函数

WBOY
WBOY原创
2016-06-06 20:52:291162浏览

RT 求一个中英文混排字符串截取的函数,substr(), mb_substr(), iconv_substr()貌似都不太给力的说,网上放出来的自定义函数也试过一些,没有好用的.= =!
其实我的主要目的是想截出来的几行字的长度是一模一样的,所以求教一下~

补充:
下面是我测试用的代码,貌似第一个和第二个答案得出的都有乱码的问题的说~
PS:回答问题的可以先用我的那段测试小文本测试一下,通过了再提交答案的说~

<?php $one = '20';
$text = 'Nokia阿根廷部门开发了Angry Birds和Fruit Ninja书签工具,通过此书签玩家就可以在任何网站裡开启Angry Birds和Fruit Ninja畅玩,而且你发射的小鸟会破坏网页架构,你切水果的手势也会顺便把网站大卸八块。';
$count= mb_strlen($text);
$row = ($count - $count%$one)/$one;
if($count%$one != 0) {
$row = $row+1;	
}
for($i=0;$i< $row;$i++) {
echo mb_strimwidth($text, $i*$one, $one);
echo '<br />';
}

回复内容:

RT 求一个中英文混排字符串截取的函数,substr(), mb_substr(), iconv_substr()貌似都不太给力的说,网上放出来的自定义函数也试过一些,没有好用的.= =!
其实我的主要目的是想截出来的几行字的长度是一模一样的,所以求教一下~

补充:
下面是我测试用的代码,貌似第一个和第二个答案得出的都有乱码的问题的说~
PS:回答问题的可以先用我的那段测试小文本测试一下,通过了再提交答案的说~

<?php $one = '20';
$text = 'Nokia阿根廷部门开发了Angry Birds和Fruit Ninja书签工具,通过此书签玩家就可以在任何网站裡开启Angry Birds和Fruit Ninja畅玩,而且你发射的小鸟会破坏网页架构,你切水果的手势也会顺便把网站大卸八块。';
$count= mb_strlen($text);
$row = ($count - $count%$one)/$one;
if($count%$one != 0) {
$row = $row+1;	
}
for($i=0;$i< $row;$i++) {
echo mb_strimwidth($text, $i*$one, $one);
echo '<br />';
}

我想你需要的就是mb_strimwidth这个函数,去看看它的定义吧 http://cn2.php.net/manual/en/function...

我用了一个比较恶心的方案。假设你的字符串是utf-8编码,那么需要转成gbk

$gbk_str = iconv('UTF-8', 'GBK', $raw);

然后substr去截这个$gbk_str,gbk编码的汉字是两个字节,英文是一个,所以刚好。

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn