<?php /** * 由于此函数返回的是一个数组,因此要配合join函数来显示字符串: * join('',subString_UTF8($str, $start, $lenth)); * 在页面显示的时候还可以在此语句后面连一个"..." * * 注: * 编码 第一字节 第二字节 * gb2312 0xa1-0xf7 0xa1-0xfe * gbk 0x81-0xfe 0x81-0xfe 0x40-0x7e * big5 0xa1-0xf7 0x81-0xfe 0x40-0x7e * * 中文字符截取且支持utf-8 * * @Param: char $str, * @Param: intege $start, * @Param: intege $start, * @return: $s. * time: Tue Aug 07 18:18:27 CST 2007 * lastime: Tue Aug 07 18:18:27 CST 2007 */ function subString_UTF8($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 $r; } ?>
|