php截取一段字符 计算它的长度,多余的用“...”代替
一般英文字符占一个字节,汉字占两个字节,有这么一种思路,在截取字符串的时候逐个判断要截取的字符是汉字还是英文字符,这样就不会出现错误了,下边给你帖一个我写的程序,你自己看下
无标题文档
<?php
function msubstr($str,$start,$len){
}
?>
输入字符串:
输入起始位置:
输入截取长度:
<?php
/*截取字符串的函数--------------数组式截取*/
function msubstr2($str,$start,$len){
$t = explode(" ",microtime());
$tt = round($t[0],5);
//将字符串中每个字符分开 并放到数组中
$str_arr = array();
$j = 1;
for($i=0;$i<strlen($str);$i++){
if(ord(substr($str,$i,1))>0xa0){ //说明是汉字 则需要一次截取3个字符
$str_arr[$j] = substr($str,$i,3);
$i = $i+2;
}else{
$str_arr[$j] = substr($str,$i,1);
}
$j++;
}
print_r($str_arr);
for($i=$start;$i<=$len+$start-1;$i++){
if($i>count($str_arr)){ //判断是否超出数组最大长度 如果是 则结束循环
break;
}
$str_temp .= $str_arr[$i];
}
$t = explode(" ",microtime());
$ttt = round($t[0],5);
return $ttt-$tt;
//return $str_temp;
}
function msubstr1($str,$start,$len){
$t = explode(" ",microtime());
$tt = round($t[0],5);
$j = 0; //记录截取的字符串的字符位置
$s = 0; //记录已经截取的字符长度
$str_temp = "";//记录截取的字符串
$k = strlen($str);
for($i=0;$i<$k;){//循环全部字
if($s>=$len) break;//如果已经截取的字符串长度超过要截取的长度 跳出循环 返回结果
if(ord(substr($str,$i,1))>0xa0){ //判断是否为汉字
if($j+1>=$start){//如果当前截取字符位置大于等于要截取的字符串的开始位置并且当前已经截取的字符长度还没有超出要截取的字符串的长度 则将此字符为要截取的字符
$str_temp .= substr($str,$i,3);
$s++;//已经截取的字符串长度加1
}
$j++;//当前截取的字符串的位置加1
$i+=3;//确定为汉字 在utf8编码下占三个英文字符的长度 则需要记录三个字符
}else{
if($j+1>=$start){
$str_temp .= substr($str,$i,1); //截取英文字符
$s++;//已经截取的字符串长度加1
}
$j++;//当前截取的字符串的位置加1
$i++;//非汉字字符占一个字符的长度
}
}
$t = explode(" ",microtime());
$ttt = round($t[0],5);
//return $ttt-$tt;
return $str_temp;
}
if($_POST[sub]){
echo msubstr1($_POST[str],$_POST[str_start],$_POST[str_len]);
}
?>
例子1,使用strlen获得长度,substr提取前5个字符:
$str = '123456789';if (strlen($str)>5) $str=substr($str,0,5) . '...';echo $str;例子2,使用explode拆分IP,然后组装:
$ip = '192.168.0.1';list($ip1,$ip2,$ip3) = explode('.',$ip);$ip = "*-*-$ip3-$ip4";echo $ip;
$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>$cutlength){
$returnstr = $returnstr."...";//超过长度时在尾处加上省略号
}
return $returnstr;
}
以上是函数,参数是相应字符串和该字符串长度,字符串的长度可以通过strlen函数获取!希望对你有帮助!
判断字符串的长度呢
functiuon substr($str){
$len=strlen($str);
if($len<12){
return $str
}else{
return substr($str,0,12).'...';
}
}
好像是这个思路
你好,有一个函数很神奇,它深藏不露,功能“强大”,但又很少让我们发现,那就是mb_strimwidth函数,它是由mbstring库扩展而来,可以在php.ini中打开这个组件.便可随心所欲的使用了.希望对你有所帮助!
去检测第几个字节开始是中文字啊
卢帘心脑: 判断字符串的长度呢 functiuon substr($str){ $len=strlen($str); if($len<12){ return $str }else{ return substr($str,0,12).'...'; } } 好像是这个思路
牟定县13553065924: 如何用php得到中文字的长度??
卢帘心脑: <?php /** +---------------------------------------------------------- * 字符串截取,支持中文和其他编码 +---------------------------------------------------------- * @static * @access public +---------------------------------------------------------- * @param string $str 需要转换的字符串 * ...
牟定县13553065924: PHP获取字符串长度 - ?
卢帘心脑: strlen函数 $length = strlen($a);
牟定县13553065924: php如何获取中文字符长度,一个中文字符算一个 - ?
卢帘心脑: 在PHP中专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数并非PHP的核心函数,所以,它们常常有可能没有开启.要在php.ini中开启即可.获取长度实例:1 ,utf-8环境下使用 header('Content-type:text/...
牟定县13553065924: php调用数据,如何截取字符长度 - ?
卢帘心脑: 我这里有一个 截取 utf-8编码的中文例子 /*** 截取UTF-8编码下字符串的函数** @param string $str 被截取的字符串* @param int $length 截取的长度* @param bool $append 是否附加省略号** @return string*/function CutStr($str,$start, $...
牟定县13553065924: 用PHP统计字符串长度? - ?
卢帘心脑: PHP 计算字符串长度代码示例如下,具体逻辑在代码中.//统计字符串长度,适用中文,字母,数字混编 function get_strlength($str) { //强字符串统一转换为utf-8格式 $encode = mb_detect_encoding( $str, array('ASCII','UTF-8','GB2312','GBK')); if (...
牟定县13553065924: 这段PHP代码怎么取字段中的字节长度? - ?
卢帘心脑: 先直接放答案(替换掉你上面代码的sql语句):SELECT id, CONCAT(SUBSTRING(`content`, 1, 30), '...') AS content FROM `newsdb` WHERE `status` = 1 AND `shenhe` = 1 ORDER BY id DESC LIMIT 0,5;主要起作用的就是 MySQL 的两个函...
牟定县13553065924: php如何截取汉字长度啊??
卢帘心脑: function cutstr($string, $length, $dot = '') { global $dbcharset; $length*=2; if(strlen($string) <= $length) { return $string; } $string = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string); $strcut = ''; if(strtolower($dbcharset) == 'utf8') { $n = $tn = ...
牟定县13553065924: PHP怎么用substr函数截取字符串中的某部分 - ?
卢帘心脑: 示例:substr("hello world",6,4)==>"world" 语法 substr(string,start,length) 参数 描述:string 必需.规定要返回其中一部分的字符串. start 必需.规定在字符串的何处开始.正数 - 在字符串的指定位置开始 负数 - 在从字符串结尾开始的指定位置开始0 - 在字符串中的第一个字符处开始 length 可选.规定被返回字符串的长度.默认是直到字符串的结尾.正数 - 从 start 参数所在的位置返回的长度 负数 - 从字符串末端返回的长度
牟定县13553065924: php分割中英文字符串的几种方 - ?
卢帘心脑: 对一段文字按照字数进行分割,因为文字中可能是中英文混合的,而php函数strlen只能计算出字串的字节数,于是自己实现了几个函数,分享下.例1,计算字符总长度.01 02 function ccStrLen($str) #计算中英文混合字符串的长度 03 { 04 $...