<?php /** * php截取字符串的函数 支持utf8,gbk * ----------------------------------------------------- * $Author: Bevin Chen $ * $Email: bevin#chenapp.com $ * $Date: 2009-10-14 $ * ----------------------------------------------------- * @param string $str 被截取的字符串 * @param int $length 截取的长度 * @param bool $append 是否附加省略号 * @param string $charset 编码设置,utf8,gbk * * @return string */ function sub_str($str, $length = 0, $append = true, $charset='utf8') { $str = trim($str); $strlength = strlen($str); $charset = strtolower($charset); if ($charset == 'utf8') { $l = 0; while ($i <= $strlength) { if (ord($str{$i}) < 0x80) { $l++; $i++; } else if (ord($str{$i}) < 0xe0) { $l++; $i += 2; } else if (ord($str{$i}) < 0xf0) { $l += 2; $i += 3; } else if (ord($str{$i}) < 0xf8) { $l += 1; $i += 4; } else if (ord($str{$i}) < 0xfc) { $l += 1; $i += 5; } else if (ord($str{$i}) < 0xfe) { $l += 1; $i += 6; } if ($l >= $length) { $newstr = substr($str, 0, $i); break; } } if($l < $length) { return $str; } } elseif($charset == 'gbk') { if ($length == 0 || $length >= $strlength) { return $str; } while ($i <= $strlength) { if (ord($str{$i}) > 0xa0) { $l += 2; $i += 2; } else { $l++; $i++; } if ($l >= $length) { $newstr = substr($str, 0, $i); break; } } } if ($append && $str != $newstr) { $newstr .= '..'; } return $newstr; } ?>