function chn_substr($string,$start,$length="") {
if (!is_int($length) && $length != "") {
echo "错误:length 值错误(必须为数值)。<br>";
return false;
} elseif ($length == "0") {
return "";
} else {
$l = strlen($string);
$a = 0;
$ptr = 0;
$str_list = array();
$str_list2 = array();
while ($a < $l) {
$ch = substr($string,$a,1);
$ch2 = substr($string,$a+1,1);
if (ord($ch) >= HexDec("0x81") && ord($ch2) >= HexDec("0x40")) {
$str_list[$ptr] = $a;
$str_list2[$ptr] = $a+1;
$ptr++;
$a += 2;
} else {
$str_list[$ptr] = $a;
$str_list2[$ptr] = $a;
$ptr++;
$a++;
} // END IF
} // END WHILE if ($start > $ptr || -$start > $ptr) {
return;
} elseif ($length == "") {
if ($start >= 0) { // (text,+)
return substr($string,$str_list[$start]);
} else { // (test,-)
return substr($string,$str_list[$ptr + $start]);
}
} else { if ($length > 0) { // $length > 0
if ($start >= 0) { // (text,+,+)
if (($start + $length) >= count($str_list2)) {
return substr($string,$str_list[$start]);
} else { //(text,+,+)
$end = $str_list2[$start + ($length - 1)] - $str_list[$start] +1;
return substr($string,$str_list[$start],$end);
} } else { // (text ,-,+)
$start = $ptr + $start;
if (($start + $length) >= count($str_list2)) {
return substr($string,$str_list[$start]);
} else {
$end = $str_list2[$start + ($length - 1)] - $str_list[$start] +1;
return substr($string,$str_list[$start],$end);
}
} } else { // $length < 0
$end = strlen($string) - $str_list[$ptr+$length];
if ($start >= 0) { // (text,+,-) {
return substr($string,$str_list[$start],-$end);
} else { //(text,-,-)
$start = $ptr + $start;
return substr($string,$str_list[$start],-$end);
} } // END OF LENGTH > / < 0 }
} // END IF
}
if (!is_int($length) && $length != "") {
echo "错误:length 值错误(必须为数值)。<br>";
return false;
} elseif ($length == "0") {
return "";
} else {
$l = strlen($string);
$a = 0;
$ptr = 0;
$str_list = array();
$str_list2 = array();
while ($a < $l) {
$ch = substr($string,$a,1);
$ch2 = substr($string,$a+1,1);
if (ord($ch) >= HexDec("0x81") && ord($ch2) >= HexDec("0x40")) {
$str_list[$ptr] = $a;
$str_list2[$ptr] = $a+1;
$ptr++;
$a += 2;
} else {
$str_list[$ptr] = $a;
$str_list2[$ptr] = $a;
$ptr++;
$a++;
} // END IF
} // END WHILE if ($start > $ptr || -$start > $ptr) {
return;
} elseif ($length == "") {
if ($start >= 0) { // (text,+)
return substr($string,$str_list[$start]);
} else { // (test,-)
return substr($string,$str_list[$ptr + $start]);
}
} else { if ($length > 0) { // $length > 0
if ($start >= 0) { // (text,+,+)
if (($start + $length) >= count($str_list2)) {
return substr($string,$str_list[$start]);
} else { //(text,+,+)
$end = $str_list2[$start + ($length - 1)] - $str_list[$start] +1;
return substr($string,$str_list[$start],$end);
} } else { // (text ,-,+)
$start = $ptr + $start;
if (($start + $length) >= count($str_list2)) {
return substr($string,$str_list[$start]);
} else {
$end = $str_list2[$start + ($length - 1)] - $str_list[$start] +1;
return substr($string,$str_list[$start],$end);
}
} } else { // $length < 0
$end = strlen($string) - $str_list[$ptr+$length];
if ($start >= 0) { // (text,+,-) {
return substr($string,$str_list[$start],-$end);
} else { //(text,-,-)
$start = $ptr + $start;
return substr($string,$str_list[$start],-$end);
} } // END OF LENGTH > / < 0 }
} // END IF
}
解决方案 »
- 请教:header下载问题
- 拖动网页的滚动条,网页的开头还是在那个位置
- 小弟新手,有个login问题,各位大哥帮下告诉错在哪了? 谢谢!!
- 有没有把文字从其他格式转为utf-8格式的php代码?
- 2个表如何关联查询(thinkphp)
- 如何在验证身份时对大小写敏感(case sensitive)
- 两个有关流量统计的问题,每个50,共100分
- 求教一sql语句,大家帮我看看,谢
- 如何将$ddd当成字符串插入库中?
- php的函数中如何把数组结果传出来?
- 显示图片
- 我本地机的环境是:windows2000,php4,mysql。。。,我的虚拟主机的环境是:linux,php4,mysql,请问我在我本地调试好的web网站,上传
//给你一个函数:
function ChgTitle($title,$length){
if($length!=0){
if (strlen($title)>$length) {
$temp = 0;
for($i=0; $i<$length; $i++)
if (ord($title[$i]) > 128)
$temp++;
if ($temp%2 == 0)
$title = substr($title,0,$length)."...";
else
$title = substr($title,0,$length+1)."...";
}
return $title;
}else{return $title;}
}
//使用例子:
$aaa="在我记忆的脑海里,一份独特的珍藏,一份思念的眷恋,将是我生命历程的永远回味。十年前的今天我美好幸福的人生旅途瞬间画上了句号。我由一个娇媚的少妇,变成一名独自面对一切的坚强女人,成熟女人,肩负着重大责任的女人。是人生的坎坷让我脱胎换骨。 十年前的今天,也是一双休日,天很冷,你清晨就悄悄挪出温暖的被窝。做为电视新闻工作者的你,每次的双休日很少休息,为了全市人民能看上好的电视节目,你辛勤的努力着,流下很多的汗水,直到你永远离开我后,才在你的办公桌里看到你曾经受到省,地,市级各种奖励证书三十余本。我知道你是干事业的男人
";
$result=ChgTitle($aaa,40);//取40个字符,既20个汉字
echo $result;
直接这样不也可以么
$str=substr($str,0,40);//取前20个字
考虑到可能是半角与全角字符共存则
substr($text,0,20).chr(0)如果你使用php5那么事情就变的异常简单
iconv_substr($text,0,20,'gbk')
不能取汉字呀
我取出来试乱码
function sub_title($title,$subnum)
{
$tempcount=0;
for ($i=0;$i<$subnum;$i++)
{
if (ord($title[$i])>128) $tempcount++;
}
if (((int)($tempcount/2)*2)==$tempcount) $title=substr($title,0,$subnum);
else $title=substr($title,0,$subnum-1);
return $title;
}
我substr取出来是乱码
谁有更好的办法?