哪位共享一下自己之前的防止截错中文字符的自定义函数?

zairwolfd 2005-04-07 04:01:03
我那个csubstr只能从0截取到某个字符。我想要完全类似substr格式的(从第n个开始截取)。
...全文
127 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2005-04-08
  • 打赏
  • 举报
回复
cutstr和mysubstr函数适用于简单的截断文字的场合,比如页面中的标题列表
其实并不需要知道一个汉字是否被截断了,所以cutstr的效率就不如mysubstr了

c_substr函数适用于需要精确的截取的场合,不要看他的代码较多但是效率一点都不低。
经测试,他的运行时间是mb_substr的三倍,属于同一数量级。而且原串的长度不影响运行时间。
而与cutstr函数一样采用逐字判断算法的函数都有运行时间随原串增长而增长的毛病
helloyou0 2005-04-08
  • 打赏
  • 举报
回复
如果安装了mbstring库,可以用里面的函数
mysqler 2005-04-08
  • 打赏
  • 举报
回复
function cutstr($string,$len)
{
if(strlen($string)>$len) {
for $i=0; $i<$len; $i++){
$strcut.= ord($string[$i]>127) ? $string[$i].$string[++$i] : $string[$i];}
return $strcut.".....";
}else{
return $strcut;}
}

$str='这个是discuz用的.中英文均可.但中文占两个字符.';
cutstr($str,6)='这个是.....';

zhiin1 2005-04-08
  • 打赏
  • 举报
回复
帮顶一下
zhiin1 2005-04-07
  • 打赏
  • 举报
回复
以前唠叨写过类似这样的函数:

function mysubstr($txt, $num)
{
if(strlen($txt)>$num)
{
$txt = substr($txt, 0, $num-4) ;
$txt .= chr(0) . "..." ;
}
return $txt ;
}

这么简单的没人用 请问它存在什么避端吗?
xuzuning 2005-04-07
  • 打赏
  • 举报
回复
function c_substr($str,$start=0) {
$ch = chr(127);
$p = array("/[\x81-\xfe]([\x81-\xfe]|[\x40-\xfe])/","/[\x01-\x77]/");
$r = array("","");
if(func_num_args() > 2)
$end = func_get_arg(2);
else
$end = strlen($str);
if($start < 0)
$start += $end;

if($start > 0) {
$s = substr($str,0,$start);
if($s[strlen($s)-1] > $ch) {
$s = preg_replace($p,$r,$s);
$start += strlen($s);
}
}
$s = substr($str,$start,$end);
$end = strlen($s);
if($s[$end-1] > $ch) {
$s = preg_replace($p,$r,$s);
$end += strlen($s);
}
return substr($str,$start,$end);
}

$t = "我那个csubstr只能从0截取到某个字符";
echo c_substr($t,2);
echo c_substr($t,2,5);
echo c_substr($t,2,-4);
echo c_substr($t,-5);

zairwolfi 2005-04-07
  • 打赏
  • 举报
回复
自己写了个:
function csubstr($string,$start,$length) {
if(ord($string[$start])>0xa0 && ord($string[$start+1])<=0xa0) $str=$string[$start-1];
for($i=$start;$i<$length;$i++){
if(ord($string[$i])>0xa0){
$str.=$string[$i].$string[$i + 1];
$i++;
}else $str.=$string[$i];
}
return $str;
}

21,891

社区成员

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

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