取部份字符串。
语法: string substr(string string, int start, int [length]);
返回值: 字符串
函数种类: 资料处理
内容说明
本函数将字符串 string 的第 start 位起的字符串取出 length 个字符。若 start 为负数,则从字符串尾端算起。若可省略的参数 length 存在,但为负数,则表示取到倒数第 length 个字符。
使用范例
代码如下 | 复制代码 |
<? echo substr("abcdef", 1, 3); // 返回 "bcd" echo substr("abcdef", -2); // 返回 "ef" echo substr("abcdef", -3, 1); // 返回 "d" echo substr("abcdef", 1, -1); // 返回 "bcde" ?> |
上面只支持英文不支持中文
截取GB2312中文字符串
代码如下 | 复制代码 |
< ?php //截取中文字符串 function mysubstr($str, $start, $len) { $tmpstr = ""; $strlen = $start + $len; for($i = 0; $i < $strlen; $i++) { if(ord(substr($str, $i, 1)) > 0xa0) { $tmpstr .= substr($str, $i, 2); $i++; } else $tmpstr .= substr($str, $i, 1); } return $tmpstr; } ?> |
截取utf8编码的多字节字符串
代码如下 | 复制代码 |
< ?php //截取utf8字符串 function utf8Substr($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); } ?> |
/*
* 功能: 作用跟substr一样,除了它不会造成乱码
* 参数:
* 返回:
*/
代码如下 | 复制代码 |
function utf8_substr( $str , $start , $length=null ){ // 先正常截取一遍. $res = substr( $str , $start , $length ); $strlen = strlen( $str ); /* 接着判断头尾各6字节是否完整(不残缺) */ // 如果参数start是正数 // 如果第1字节就不是 完整字符的首字节, 再往后截取大约6字节 // 判断前6字节是否符合utf8规则 // 判断后6字节是否符合utf8规则 return $res; |
测试数据::
代码如下 | 复制代码 |
<?php $str = 'dfjdjf测13f试65&2数据fdj(1就mfe&……就'; var_dump( utf8_substr( $str , 22 , 12 ) ); echo ' <br /> '; var_dump( utf8_substr( $str , 22 , -6 ) ); echo ' <br /> '; var_dump( utf8_substr( $str , 9 , 12 ) ); echo ' <br /> '; var_dump( utf8_substr( $str , 19 , 12 ) ); echo ' <br /> '; var_dump( utf8_substr( $str , 28 , -6 ) ); echo ' <br /> '; |
显示结果::(截取无乱码, 欢迎大家测试, 提交bug)
string(12) "据fdj"
string(26) "据fdj(1就mfe&…"
string(13) "13f试65&2数"
string(12) "数据fd"
string(20) "dj(1就mfe&…"
把我常用的分享出来
下面我们再来看中文截函数吧。
代码如下 | 复制代码 |
function MooCutstr($string, $length, $dot = ' ...') { global $charset; if(strlen($string) <= $length) { return $strcut.$dot; |