php字符串截取,取“整”字问题 求助,小弟现在遇到个问题。在PHP中截取字符串长度,在处理有,有可能字符串中会有特殊号,如/ , . \ 之类的,我要是想取这个字符串长度为15个字符,遇到这样的字符他就会出错。数据库是存进去了,不过取的时候他就会出错出现类似于方框之类的特殊字符,求助有没有办法让这种情况下,取整字的办法?在线等。例如:业务经理/经理 他现在取出来的就是:业务经理/□□ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 存入数据库前用addslashes(string s)函数处理一下。 说明你存储的时候分隔到了汉字,可以这样读取汉字://统计总字数 function get_page_word(){ $this->sum_word = $this->strlen_utf8($this->pagestr); //获得总字数 return $this->sum_word; } function strlen_utf8($str){ $i = 0; $count = 0; $len = strlen ($str); while ($i < $len){ $chr = ord ($str[$i]); //ord(string) 获得string的ascii值的字符串 $count++; $i++; if ($i >= $len) break; if ($chr & 0x80){ //0x80是指十六进制数 汉字的字节编码一般在0x80内,大于0x80的数会被认为是负数,不合汉字的形式。 $chr <<= 1; while ($chr & 0x80) { $i++; $chr <<= 1; } } } return $count; }然后再对sum_word进行分隔。一般都是采用explode和substr函数进行操作。 /*** 截取字符串** @access public* @param $str[string] 待截取的字符串* @param $start[number] 开始截取位置 [default]0* @param $length[number] 截取长度 [default]20* @param $suffix[string] 截取后后缀 [default]NULL* @param $charset[string] 字符串编码 [default]utf8* @return string*/function CsubStr($str, $start=0, $length=20, $suffix='', $charset="utf8"){ if ( '' == $str || is_null($str) || is_bool($str) ) return $str; if ( function_exists("mb_substr") ){ $str = (mb_strlen($str) > $length) ? mb_substr($str, $start, $length, $charset) . $suffix : $str; unset($start, $length, $suffix, $charset, $re, $match); return $str; } if ( function_exists('iconv_substr') ) { $str = (iconv_strlen($str,$charset) > $length) ? iconv_substr($str, $start, $length, $charset) . $suffix : $str; unset($start, $length, $suffix, $charset, $re, $match); return $str; } $re['utf8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/"; $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/"; $re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/"; $re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/"; @preg_match_all($re[$charset], $str, $match); $slice = implode('', array_slice($match[0], $start, $length)) . $suffix; unset($str, $start, $length, $suffix, $charset, $re, $match); return $slice;} 正则表达式匹配时,如何去掉引号 php如何随机获取txt里面的关键词? 高手帮忙看一下!! 如何将值和函数带入模板文件 请教各位一个问题好吗 在全角半角里计算机是怎样识别的?十万火急!!!!!!!!!!!!!!!!!! 关于域名 为什么if语句体不能执行,我用的PHP版本是4.3.4,如果把$submit改成$submit,语句体就执行了,请问是怎么回事? 各位大侠,帮个忙!一个PHP的问题 mysql数据库备份的问题 php菜鸟 谁能帮我看看php和Apache服务器配置的问题 PHP上传文件失败,怎么回事?我是照抄的也失败了。。
//统计总字数
function get_page_word(){
$this->sum_word = $this->strlen_utf8($this->pagestr); //获得总字数
return $this->sum_word;
} function strlen_utf8($str){
$i = 0;
$count = 0;
$len = strlen ($str);
while ($i < $len){
$chr = ord ($str[$i]); //ord(string) 获得string的ascii值的字符串
$count++;
$i++;
if ($i >= $len)
break;
if ($chr & 0x80){ //0x80是指十六进制数 汉字的字节编码一般在0x80内,大于0x80的数会被认为是负数,不合汉字的形式。
$chr <<= 1;
while ($chr & 0x80) {
$i++;
$chr <<= 1;
}
}
}
return $count;
}然后再对sum_word进行分隔。一般都是采用explode和substr函数进行操作。
/**
* 截取字符串
*
* @access public
* @param $str[string] 待截取的字符串
* @param $start[number] 开始截取位置 [default]0
* @param $length[number] 截取长度 [default]20
* @param $suffix[string] 截取后后缀 [default]NULL
* @param $charset[string] 字符串编码 [default]utf8
* @return string
*/
function CsubStr($str, $start=0, $length=20, $suffix='', $charset="utf8"){
if ( '' == $str || is_null($str) || is_bool($str) )
return $str;
if ( function_exists("mb_substr") ){
$str = (mb_strlen($str) > $length)
? mb_substr($str, $start, $length, $charset) . $suffix
: $str;
unset($start, $length, $suffix, $charset, $re, $match);
return $str;
}
if ( function_exists('iconv_substr') ) {
$str = (iconv_strlen($str,$charset) > $length)
? iconv_substr($str, $start, $length, $charset) . $suffix
: $str;
unset($start, $length, $suffix, $charset, $re, $match);
return $str;
}
$re['utf8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
@preg_match_all($re[$charset], $str, $match);
$slice = implode('', array_slice($match[0], $start, $length)) . $suffix;
unset($str, $start, $length, $suffix, $charset, $re, $match);
return $slice;
}