注册 登录
编程论坛 PHP技术论坛

解决中文被截成乱码的问题

rainic 发布于 2007-04-10 23:26, 1416 次点击
<?php
//2007-04-09 Create By Rain Chan
function left($str, $len) { //解决中文被截成乱码的问题
$arr = str_split($str);
$i = 0;
foreach ($arr as $chr) {
if (ord($chr) > 128)
$add = $add ? 0 : 1;
$i++;
if ($i == $len)
break;
}
return substr($str, 0, $len + $add);
}
//echo left($_GET['str'], $_GET['len']);
?>
6 回复
#2
lmhllr2007-04-11 09:14
最简单的,用mb_扩展库~~
#3
rainic2007-04-13 23:11
mb_扩展截出来的不整齐
#4
lmhllr2007-04-14 11:36

<?php
/* 函数名:strSplit
++ 功 能:中英文混合截取
++ 作 者:cator
*/
function strSplit($s, $len) {
$end = '…';
$result = '';
$strLen = strlen($s);
if ($strLen <= $len) {
return $s;
}
$len -= 2;
for ($i=0; $i<$len && $i<$strLen; $i++) {
$c = $s[$i];
if (ord($c) < 0x80) {
$result .= $c;
} elseif ($i+1<$len) {
$result .= $s[$i++] . $s[$i];
}
}
return ($i < $strLen) ? ($result . $end) : $result;
}

echo strSplit('1234567', 10), '<br />';
echo strSplit('1234567890', 10), '<br />';
echo strSplit('1234中文567890abcdefghijkl', 10), '<br />';
echo strSplit('全部都是中文', 10), '<br />';
echo strSplit('全a部b都c是d中e文', 10), '<br />';
?>

#5
islet2007-04-14 14:28
我也来一个
支持中英文混合、左、右截取
<?php
//left左侧截取,right右侧截取
//作者:ISLET
function left($content,$length) {
if($length && strlen($content)>$length){
$num=0;
for($i=0;$i<$length-3;$i++) {
if(ord($content[$i])>127){
$num++;
}
}
$num%2==1 ? $content=substr($content,0,$length-4):$content=substr($content,0,$length-3);
$content.='..';
}
return $content;
}
function right($content,$length) {
if($length && strlen($content)>$length){
$len=strlen($content);
$s=$len-$length;
$num=0;
for($i=$s;$i<$len;$i++) {
if(ord($content[$i])>127){
$num++;
}
}
$num%2==1 ? $content=substr($content,$s+1,$length):$content=substr($content,$s+2,$length);
$content='..'.$content;
}
return $content;
}
?>
#6
lmhllr2007-04-14 21:23
楼上这个好多了,顶!
#7
jiushiwo2007-04-16 15:59
学习学习
1