请问如何实现长文字的缩写功能.

XiaoDi_Liu 2004-08-08 03:51:56
我有一大串长文字.在某些场合只需显示前10个字符和......但是用了substr(xx,0,10)后偶尔会产生xxx?......的情况.也就是这个?是被分割的汉字字符.前十个当中有奇数个数字和字母.请问有什么好的解决之道吗?谢谢!
...全文
110 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
skystar008 2004-08-09
  • 打赏
  • 举报
回复
这个问题问的人太多了!
function substrex($str,$len)
{
$str = (string)$str;
$len = (int)$len;

$strlen = strlen($str);
if($len>$strlen) $len = $strlen;

$i = 0;
$fixlen = 0;
while($i<$len){
$chr = $str[$i];
$i++;
if(ord($chr)<0x80) $fixlen++; //128D
elseif($i<$len){
$i++;
$fixlen += 2;
}
}
$cutstr = substr($str,0,$fixlen);
if ($str <> $cutstr)
{
$cutstr .= '...';
}
return $cutstr;
}
lzkd 2004-08-08
  • 打赏
  • 举报
回复
PHP中一个控制字符串输出的函数
// php 中 一个控制字符串输出的函数(中英文),每行显示多少字数,避免英文的影响
// $str 字符串
// $len 每行显示的字数(汉字×2)


function rep($str,$len)

{
$strlen=strlen($str);
$i=0;
$finstr="";
$pos=0;

while($i<$strlen)
{
$s1=substr($str,$i,1);
$s2=ord($s1);
if($s2>0xa0){

$finstr.=substr($str,$i,2);
$pos+=2;
$i+=2;

}else{

switch($s2){
case 13:
$finstr.="<BR>";
$pos=0;
break;
case 10:
$pos=0;
break;
case 32;
$finstr.=" ";
$pos++;
break;
default:
$finstr.=htmlspecialchars($s1);
$pos++;
break;
}

$i++;

} //if

if($pos>=$len){
$finstr.="<BR>";
$pos=0;
}




} //while
return $finstr;
}

lzkd 2004-08-08
  • 打赏
  • 举报
回复
substr()函数中文版(终极完美版)


function msubstr($str,$start,$len)//字符位置从0开始
{
$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;

}

ice_berg16 2004-08-08
  • 打赏
  • 举报
回复
/* 函数 sub_str($text, $length)
** 功能 从文本中截取指定长度字符串,考虑了对中文的处理
** 参数 $text 要截取的文本
** 参数 $length 要截取的字符串长度
*/
function sub_str($text, $length)
{
for ($i=0; $i<$length; $i++)
{
$chr = substr($text, $i, 1);
if (ord($chr) > 0x80)//字符是中文
{
$length++;
$i++;
}

}
$str = substr($text, 0, $length);
return $str;
}
since2006 2004-08-08
  • 打赏
  • 举报
回复
用这个。。。。接分ing... :)

$srt = substr($str,"0","20").chr(0);

终于抢到一贴了,以前一朋友靠诉偶的。。
juxugongzi 2004-08-08
  • 打赏
  • 举报
回复
一般来说,GB2312汉字的前后两个字节的ASCII值都不会小于 128,而英文字符正相反,只需要判断这个就可以了。不过,你不要想用这个办法判断其他大字库的汉字编码,比如说 GBK。
spacet 2004-08-08
  • 打赏
  • 举报
回复
写个函数,判断你需要截取的地方是汉字还是非汉字

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧