在使用php截取字符串的时候,很有可能会遇到乱码的问题。
比如下面的代码
echo substr("最全的编程技术",0,7);
得到的结果将会是
最全�
为什么呢?
因为中文字符在php中是占三个字符的。
这段代码截取7个字符,所以前面两个是正确的,但是第三个就是乱码了。
今天这个函数是真正的不管是中文还是英文,都能正确截取,并且不会出现乱码。
<?php
function displaystr($str, $start, $lenth){
$len = strlen($str);
$r = array();
$n = 0;
$m = 0;
for($i = 0; $i < $len; $i++) {
$x = substr($str, $i, 1);
$a = base_convert(ord($x), 10, 2);
$a = substr('00000000'.$a, -8);
if ($n < $start){
if (substr($a, 0, 1) == 0) {
}elseif (substr($a, 0, 3) == 110) {
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$i += 2;
}
$n++;
}else{
if (substr($a, 0, 1) == 0) {
$r[ ] = substr($str, $i, 1);
}elseif (substr($a, 0, 3) == 110) {
$r[ ] = substr($str, $i, 2);
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$r[ ] = substr($str, $i, 3);
$i += 2;
}else{
$r[ ] = '';
}
if (++$m >= $lenth){
break;
}
}
}
return join('',$r);
}
?>
其中$str是要截取的字符串,$start是开始截取的位置,$lenth为将要截取的长度。
转载自 http://www.santii.com/article/45.html