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网站被挂马的解决办法)
- dede织梦cms安装教程(开源织梦dedecms快速搬家图文教程)
- dedecms上传附件大小限制(dedecms删除文章同时也删除附件的修改方法)
- dedecms屏蔽规则(织梦dedecms修改任意管理员漏洞处理方法)
- dedecms数据库备份地址(dedecms搬家时出现数据库导入失败的解决方法)
- dedecms更新后设置空白(dedecms去掉当前位置栏目链接的方法)
- thinkphp兼容dedecms(DedeCMS Error:Tag disabled:"php"的解决办法)
- dedecms专题列表(DedeCMSV6重磅发布!同步开启全新商业开发者计划)
- dedecms列表分页代码(Dedecms文章设置推荐后列表页标题自动加粗的解决方法)
- dedecms怎样快速找到图片位置(dede搬家后路径变化批量替换图片路径避免图片不能正常显示)
- dedecms关键词限制(dedecms tag标签伪静态的修改方法)
- dedecms更改主页模板(dedecms首页调用专题页描述和链接的实现方法)
- dedecms怎么调用标签(DEDECMS 留言薄模块的使用方法)
- dedecms文章标题(dedecms5.7后台发布文章提示“标题不能为空”的解决方法)
- dedecms替换条件(织梦cmsDEDECMS通过正则批量查找替换数据库的自定义内容)
- dedecms新手建站教程网页设计(DEDECMS幻灯片中JavaScript实际应用举例)
- 乔欣 古装剧中的高颜值(古装剧中的高颜值)
- 怎么才可以财富自由(如何让自己实现财富自由)
- 为什么越来越多年轻人回农村(为什么越来越多年轻人回农村生活)
- 怎么快速学好英语(怎么快速学好英语初中)
- 中国留学生都是富二代吗()
- 我们现在吃的苹果是哪里来的 原来现代苹果引入中国仅有一百多年(我们现在吃的苹果是哪里来的)
热门推荐
- php7 入门(php7新特性的理解和比较总结)
- 阿里云ecs属于哪种云服务(阿里的轻云服务器、虚拟主机、云服务器ECS的区别?)
- laravel怎么获取单个框架(laravel-admin自动生成模块,及相关基础配置方法)
- 怎么把数据库备份到阿里(阿里云数据库备份DBS与自建备份系统有什么优势?)
- css中ul li的用法
- vue实现商品详情讲解(京东 Vue3 组件库支持小程序开发的详细流程)
- mysqlinnodb锁使用教程(MySQL Innodb关键特性之插入缓冲insert buffer)
- 12步轻松搞定python装饰器(Python3.5装饰器典型案例分析)
- docker重启报错(Docker启动为Exited状态)
- vue加载html5动画(vue实现旋转木马动画)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9