截取中文字符串
为什么用文本辅助函数word_limiter()character_limiter()等都不起作用,只对英文起作用,
请问怎么办啊? 看了楼主说的两个函数(word_limiter(),character_limiter())的代码,自己发现越来越喜欢正则了
需要说明的是 word_limiter() 是单词数量截取 而非单字数量截取,以空格(或多个)分开 计算的。对中文,似乎用处不大
这样说,不知道能不能解楼主的疑惑
如果用文件编码为utf8的话 截取字符
下面函数可实现截取功能
function csubstr($str, $from, $len)
{
return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
'$1',$str);
}
[ 本帖最后由 alertger 于 2008-12-19 16:19 编辑 ] 截取中文字符串,直接用 mb_substr 最好用! CI的作者不使用中文的:lol mb_substr函数确实可以避免许多问题,但目前大概有不少的php服务器环境还不能用 这个函数呀(没有包含这个php_mbstring.dll)
我的主机上现在就是这样的情况。咳..... 那就找网上的支持中文截取的 PHP 函数,貌似有很多,google 一下。 function str_cut($str, $sublen, $etc = '...')
{
if(strlen($str)<=$sublen) {
$rStr = $str;
} else {
$I = 0;
while ($I<$sublen) {
$StringTMP = substr($str,$I,1);
if (ord($StringTMP)>=224) {
$StringTMP = substr($str,$I,3);
$I = $I + 3;
} elseif (ord($StringTMP)>=192) {
$StringTMP = substr($str,$I,2);
$I = $I + 2;
} else {
$I = $I + 1;
}
$StringLast[] = $StringTMP;
}
$rStr = implode('',$StringLast).$etc;
}
return $rStr;
}
utf8 截字的中文算2 其他算1 可扩展一下text_helper文件
if(!function_exists('sub_str')) {
/**
* 截取UTF-8编码下字符串的函数
*
* @param string $str 被截取的字符串
* @param int $length 截取的长度
* @param bool $append 是否附加省略号
*
* @returnstring
*/
function sub_str($str, $length = 0, $append = true)
{
$str = trim($str);
$strlength = strlen($str);
if ($length == 0 || $length >= $strlength)
{
return $str;
}
elseif ($length < 0)
{
$length = $strlength + $length;
if ($length < 0)
{
$length = $strlength;
}
}
if (function_exists('mb_substr'))
{
$newstr = mb_substr($str, 0, $length, 'utf-8');
}
elseif (function_exists('iconv_substr'))
{
$newstr = iconv_substr($str, 0, $length, 'utf-8');
}
else
{
$newstr = substr($str, 0, $length);
}
if ($append && $str != $newstr)
{
$newstr .= '...';
}
return $newstr;
}
}
我怎么使用错误啊。。。
页:
[1]