1.strlen
strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值(长度不包含’\0’)
$title = 'üöä'; #6
$title = '你好的'; #9
$title = 'djkd'; #4
$data = strlen($title);
截取长度
//截取字符串
public static function mb_Strcut($str,$length=25,$replace='...'){
if ($str == '') return $str;
$len = mb_strlen($str,'utf-8');
if ($len <= $length) return $str;
return mb_strcut($str,0,$length,'utf-8').$replace;
}
public static function assoc_substr($sourceStr, $cutLength=30,$replace='...') {
$returnStr = '';
$i = 0;
$n = 0;
$str_length = strlen ( $sourceStr ); //字符串的字节数
while ( ($n < $cutLength) and ($i <= $str_length) ) {
$temp_str = substr ( $sourceStr, $i, 1 );
$ascnum = Ord ( $temp_str ); //得到字符串中第$i位字符的ascii码
if ($ascnum >= 224) {//如果ASCII位高与224,
$returnStr = $returnStr . substr ( $sourceStr, $i, 3 ); //根据UTF-8编码规范,将3个连续的字符计为单个字符
$i = $i + 3; //实际Byte计为3
$n ++; //字串长度计1
} elseif ($ascnum >= 192){ //如果ASCII位高与192,
$returnStr = $returnStr . substr ( $sourceStr, $i, 2 ); //根据UTF-8编码规范,将2个连续的字符计为单个字符
$i = $i + 2; //实际Byte计为2
$n ++; //字串长度计1
} elseif ($ascnum >= 65 && $ascnum <= 90) {//如果是大写字母,
$returnStr = $returnStr . substr ( $sourceStr, $i, 1 );
$i = $i + 1; //实际的Byte数仍计1个
$n ++; //但考虑整体美观,大写字母计成一个高位字符
}elseif ($ascnum >= 97 && $ascnum <= 122) {
$returnStr = $returnStr . substr ( $sourceStr, $i, 1 );
$i = $i + 1; //实际的Byte数仍计1个
$n ++; //但考虑整体美观,大写字母计成一个高位字符
} else {//其他情况下,半角标点符号,
$returnStr = $returnStr . substr ( $sourceStr, $i, 1 );
$i = $i + 1;
$n = $n + 0.5;
}
}
if ($n<=$cutLength) return $returnStr;
return $returnStr.$replace;
}