+ -
当前位置:首页 → 问答吧 → UTF8汉字截取!!

UTF8汉字截取!!

时间:2006-09-29

来源:互联网

复制PHP内容到剪贴板
PHP代码:
function CutStr($string, $sublen, $start = 0, $code = 'UTF-8') 
{
if($code == 'UTF-8')
{
  $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
  preg_match_all($pa, $string, $t_string);
  if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";
  return join('', array_slice($t_string[0], $start, $sublen));
}
else
{
  $start = $start*2;
  $sublen = $sublen*2;
  $strlen = strlen($string);
  $tmpstr = '';
  for($i=0; $i<$strlen; $i++)
  {
   if($i>=$start && $i<($start+$sublen))
   {
    if(ord(substr($string, $i, 1))>129) $tmpstr.= substr($string, $i, 2);
    else $tmpstr.= substr($string, $i, 1);
   } 
   if(ord(substr($string, $i, 1))>129) $i++;
  }
  if(strlen($tmpstr)<$strlen ) $tmpstr.= "...";
  return $tmpstr;
}
}

[ 本帖最后由 forest 于 2007-11-1 16:12 编辑 ]

作者: 帅的不能再输啦   发布时间: 2006-09-29

呵呵
顶上去

作者: fengyun   发布时间: 2006-09-29

无须如此麻烦,用 mb_substr() 即可

作者: leo   发布时间: 2006-09-29

呵呵,顶了,。。。

作者: visam   发布时间: 2006-09-30

引用:
原帖由 leo 于 2006-9-29 13:23 发表
无须如此麻烦,用 mb_substr() 即可
不是所有的租用主机都有宽字符支持的

作者: alex   发布时间: 2006-10-02

收了。谢谢。

作者: MySQL   发布时间: 2006-10-02

看不懂!:Q    该好好补补了!

作者: CFC4N   发布时间: 2006-10-03

里面的正则好长哦


支持..................................

作者: fnet   发布时间: 2006-10-03

学习学习
另有一个问题:我用iconv()将UTF-8的网页转成GB2312时,网页的后半部分出错;例如
复制PHP内容到剪贴板
PHP代码:

<?php
$HTML=file_get_contents('http://www.ebay.com.cn'); 
$HTML=urldecode(iconv("UTF-8","GB2312",$HTML));
echo $HTML;
?>

不知道是为什么?iconv的说明中说遇到目标字符无法显示的字符它就会截断,那为什么浏览器都能
很好的在不同的编码间转换?有没有什么好的办法解决这个问题呢?谢谢

[ 本帖最后由 forest 于 2007-11-1 16:14 编辑 ]

作者: doodler   发布时间: 2006-10-05

我把帖子的php代码高亮显示了!~~

[ 本帖最后由 forest 于 2007-11-1 16:15 编辑 ]

作者: forest   发布时间: 2007-11-01

收了,谢谢楼主

作者: analyzer   发布时间: 2007-11-01