dedecms搬家乱码(dedecms 的cn_substr_utf8字符串截取函数商榷)
类别:CMS系统 浏览量:2017
时间:2022-01-23 02:59:58 dedecms搬家乱码
dedecms 的cn_substr_utf8字符串截取函数商榷在dedecms里面 cn_substr_utf8 函数是这样的
/**
* utf-8中文截取,单字节截取模式
*
* @access public
* @param string $str 需要截取的字符串
* @param int $slen 截取的长度
* @param int $startdd 开始标记处
* @return string
*/
if ( ! function_exists('cn_substr_utf8'))
{
function cn_substr_utf8($str, $length, $start=0)
{
if(strlen($str) < $start+1)
{
return '';
}
preg_match_all("/./su", $str, $ar);
$str = '';
$tstr = '';</p> <p> //为了兼容mysql4.1以下版本,与数据库varchar一致,这里使用按字节截取
for($i=0; isset($ar[0][$i]); $i++)
{
if(strlen($tstr) < $start)
{
$tstr .= $ar[0][$i];
}
else
{
if(strlen($str) < $length + strlen($ar[0][$i]) )
{
$str .= $ar[0][$i];
}
else
{
break;
}
}
}
return $str;
}
}
其中
if(strlen($str) < $length + strlen($ar[0][$i]) )
一行可能会造成截取后多了一个字符,可以考虑改为
if(strlen($str) < $length + strlen($ar[0][$i]) -1 )
测试代码如下
$f = "你好fasdfa你fasdf#e#";
$pos = strpos($f,'#e#');
var_dump($pos);
var_dump(cn_substr_utf8($f,$pos));
var_dump(cn_substr_utf82($f,$pos));</p> <p>function cn_substr($str, $slen, $startdd=0)
{
global $cfg_soft_lang;
if($cfg_soft_lang=='utf-8')
{
return cn_substr_utf8($str, $slen, $startdd);
}
$restr = '';
$c = '';
$str_len = strlen($str);
if($str_len < $startdd+1)
{
return '';
}
if($str_len < $startdd + $slen || $slen==0)
{
$slen = $str_len - $startdd;
}
$enddd = $startdd + $slen - 1;
for($i=0;$i<$str_len;$i++) { if($startdd==0) { $restr .= $c; } else if($i > $startdd)
{
$restr .= $c;
}</p> <p> if(ord($str[$i])>0x80)
{
if($str_len>$i+1)
{
$c = $str[$i].$str[$i+1];
}
$i++;
}
else
{
$c = $str[$i];
}</p> <p> if($i >= $enddd)
{
if(strlen($restr)+strlen($c)>$slen)
{
break;
}
else
{
$restr .= $c;
break;
}
}
}
return $restr;
}</p> <p>function cn_substr_utf8($str, $length, $start=0)
{
if(strlen($str) < $start+1)
{
return '';
}
preg_match_all("/./su", $str, $ar);</p> <p> $str = '';
$tstr = '';</p> <p> //为了兼容mysql4.1以下版本,与数据库varchar一致,这里使用按字节截取
for($i=0; isset($ar[0][$i]); $i++)
{
if(strlen($tstr) < $start)
{</p> <p> $tstr .= $ar[0][$i];
}
else
{</p> <p> if(strlen($str) < $length + strlen($ar[0][$i]) )
{</p> <p> $str .= $ar[0][$i];
}
else
{</p> <p> break;
}
}
}
return $str;
}</p> <p>function cn_substr_utf82($str, $length, $start=0)
{
if(strlen($str) < $start+1)
{
return '';
}
preg_match_all("/./su", $str, $ar);</p> <p> $str = '';
$tstr = '';</p> <p> //为了兼容mysql4.1以下版本,与数据库varchar一致,这里使用按字节截取
for($i=0; isset($ar[0][$i]); $i++)
{
if(strlen($tstr) < $start)
{</p> <p> $tstr .= $ar[0][$i];
}
else
{</p> <p> if(strlen($str) < $length + strlen($ar[0][$i]) -1 ) // phpsir 加了 -1
{</p> <p> $str .= $ar[0][$i];
}
else
{</p> <p> break;
}
}
}
return $str;
}
您可能感兴趣
- 最新版dedecms安全策略(DedeCMS站点高级安全策略Linux篇)
- 织梦dedecms开启付费授权(去掉织梦DedeCMS列表推荐时标题被加粗的方法)
- dedecms循环次数(DedeCMS 统计栏目的文章总数的调用方法)
- dedecms替代方案(DedeCMS投票模块漏洞解决方法)
- 织梦标签怎么设置网站(织梦模板DEDECMS文章页实现让用户选择字体大小的代码的方法)
- dedecms屏蔽规则(织梦dedecms修改任意管理员漏洞处理方法)
- thinkphp兼容dedecms(DedeCMS Error:Tag disabled:"php"的解决办法)
- dede织梦怎么在文章下面添加图片(dedecms织梦模板描述description长度限制修改方法)
- dedecms操作(织梦DedeCMS官方关于正版版本号的严正声明)
- dedecms标签怎么用(dedecms 添加字段后软件列表页无法调用软件大小问题的解决方法)
- dedecms自适应代码(dedecms下广告延时加载显示,大大提高网页访问的速度)
- dedecms 添加单页(织梦dedecms内页、详情页中调用文章作者信息的方法)
- dedecms栏目内容怎么插入分页符(dedecms自动给已经发布过的文章中的关键词加超链接)
- dedecms中如何设置推荐文章(实现dedecms友情链接分栏目调用的方法图)
- dedecms标题在哪改(dedecms任意页面调用栏目内容标签{dede:field.content/}的方法)
- dedecms标签调用原理(DEDECMS栏目页开伪静态的方法apache服务器)
- 数学语文题目(语文的数学题)
- 香蕉(香蕉三种人不宜吃)
- 没钱可以快乐吗(没钱也能快乐吗)
- 快乐是什么(快乐就是)
- 东南亚有哪个国家(东南亚有哪个国家最发达)
- 东南亚安全吗(好不好挣钱)
热门推荐
- docker怎么设置远程访问(Docker开启远程访问的实现方式)
- php如何设置命名空间(PHP进阶学习之命名空间基本用法分析)
- python人脸识别库有几个(Python人脸识别第三方库face_recognition接口说明文档)
- css渐变色动画(详解CSS背景渐变图片transtion过渡效果技巧)
- asp.net中fileupload上传文件的方法
- 如何搭建个人网盘dedecms(linux和windows主机实现dedecms伪静态)
- pandasjson格式(对pandas处理json数据的方法详解)
- react重点和难点(关于React状态管理的三个规则总结)
- 性格内向的人面试注意事项
- mysql修改表结构的关键字(查看修改MySQL表结构命令)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9