共计 897 个字符,预计需要花费 3 分钟才能阅读完成。
/**
- $sourcestr 需要截取的字符串
- $cutlength 需要保存字符串的长度
*/function cut_str($sourcestr,$cutlength) { $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++; // 但考虑整体美观,大写字母计成一个高位字符 } else // 其他情况下,包括小写字母和半角标点符号,{$returnstr=$returnstr.substr($sourcestr,$i,1); $i=$i+1; // 实际的 Byte 数计 1 个 $n=$n+0.5; // 小写字母和半角标点等与半个高位字符宽… } } if ($str_length>$i){$returnstr = $returnstr . "…";// 超过长度时在尾处加上省略号} return $returnstr; }
正文完