<?php /** * 字符串截长(支持中文) * @author:zms * @version:2011-7-27 */ /** * 字符串截取 * @param object $str : 字符串(支持中文) * @param object $start :截取开始位置 * @param object $length:截取结束位置 * @param object $encode [optional]:字符串编码 * @param object $input_encode [optional]:输入的文字的编码 * @return */ function substring($str, $start, $length, $encode = 'utf-8', $input_encode = 'utf-8') { //编码转换 $str = iconv($input_encode, $encode, $str); //正则匹配 preg_match_all(getRege($encode), $str, $match); //从数组取得数据,组成字符串 $slice = join("", array_slice($match[0], $start, $length)); return $slice; } /** * 中文编码 * @param object $type * @return */ function getRege($type) { $rege = ""; switch (strtolower($type)) { case 'utf-8': $rege = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/"; break; case 'gb2312': $rege = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/"; break; case 'gbk': $rege = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/"; break; case "big5": $rege = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/"; break; default: echo "charset error"; exit; } return $rege; } ?>