php 中文字符串统计、截取
来源:互联网 发布:linux ping 显示时间 编辑:程序博客网 时间:2024/06/03 19:43
这几天复习基础时,看到字符串这一章,有个题目是给文章分页!
如是就自己动手写写。本以为很简单的,结果却折腾了两天,期间老是东看西看,东做西做的,一点也不专注………… //批评下自己
好在,终于弄出一个。只不过需要使用者自己传入当前的字符编码o(╯□╰)o。网上找到的都是利用各字符编码所在ASCII码中的十六进制区间来判断汉字………… //我承认我技术不行
下边是代码。 //写完之后就来发博客,巩固、加深印象 :-D
注:每个英文字母、汉字、特殊字符不管占多少字节,我这里始终按一个字符进行处理
转载地址:http://www.cnblogs.com/cntnn11/archive/2012/08/05/2624066.html (其实还是我)
<?php header("content-type:text/html; charset=utf-8"); echo '<pre>'; /** * 字符串统计,每个字符按一个长度计算 * 支持GBK,UTF8 * 类似mb_strlen() * @author 谭宁宁 * @time 2012-08-05 */ if( !function_exists('strcount')) { function strcount($string, $char='utf8') { $count = strlen($string); $i = 0; //当前的字节数 $j = 0; //按照字符进行累加 while ($i<$count) { //英文及半角特殊字符 if(ord($string[$i]) >=0 && ord($string[$i]) <=126) { $charset = 'en'; } //汉字及全角字符 else { $charset = $char;} switch (strtolower($charset)) { case 'gb2312': case 'gbk': $i += 1; break; case 'utf8': $i += 2; break; case 'en': default: break; } $j++; $i++; } return $j; } } else { echo '<p>fun strcount exists!</p>'; } /** * 自定义字符串截取函数,防止mb_substr()没有开启 * 通过用户输入的$char来判断当前汉字的字符集编码 * @param int $start 开始的字符数 * @param int $offest 偏移量,及从$start开始往后输出多少个字符 * @param str $char 使用者手动输入当前的汉字符编码 * @author 谭宁宁 * @time 2012-08-05 */ if( !function_exists('strsub')) { function strsub($string, $start=0, $offest=0, $char='utf8') { $count = strlen($string); $rs = ''; $i = 0; //按字节数累计 $j = 0; //按字符数累计 $size = 1; //记录每次substr时的终止位置,汉字需要考虑gbk和utf8两种情况 while ($i < $count) { //英文及半角特殊字符 if(ord($string[$i]) >=0 && ord($string[$i]) <=126) { $charset = 'en'; } //汉字及全角字符 else { $charset = $char;} switch (strtolower($charset)) { case 'gb2312': case 'gbk': $i += 1; $size = 2; break; case 'utf8': $i += 2; $size = 3; break; case 'en': default: $size = 1; break; } if($j < intval($start+$offest) && $j >= $start) { $tstart = intval($i-$size)+1; $rs .= substr($string, $tstart, $size); } $j++; $i++; } return $rs; } } else { echo '<p>fun strsub exists!</p>'; } /*$string = '123456789汉字胡总温中文啊abcdefghijklmn·=-'; echo 'substr():',substr($string, 9, 3),'<br />'; echo '长度:',strcount($string),'<br />'; echo '截取测试:',strsub($string, 0, 11),'<br />';*/ $fileContent = file_exists('reg.txt') ? file_get_contents('reg.txt') : ''; $count = strcount($fileContent); $page = !isset($_GET['p']) ? 1 : $_GET['p']; //获取当前页码,默认为1 $pagesize = 350; //每页多少字符 $pagecount = $count/$pagesize; $pagecount = strpos($pagecount, '.') ? intval($pagecount)+1 : intval($pagecount); //总页码,如果出现小数,那么就得+1页 $start = $page<=1 ? 0 : ($page-1)*$pagesize; $fileContent = strsub($fileContent, $start, $pagesize, 'utf8'); ?> <header> <style type="text/css"> p { margin: 10px; word-wrap: break-word; border:#000 1px solid; padding:5px; } p a { margin: 5px; } </style> </header> <body> <p><?php echo $fileContent; ?></p> <p> <?php echo "共有字符:$count /每页 $pagesize 个 "; echo " 共 $pagecount 页/当前第 $page 页"; if($page <= 1) { echo '<a>首页</a>'; echo '<a>上一页</a>'; } else { $up = $page-1; echo "<a href='/contentpage.php?p=1'>首页</a>"; echo "<a href='/contentpage.php?p=$up'>上一页</a>"; } if($page == $pagecount) { echo '<a>下一页</a>'; echo '<a>尾页</a>'; } else { $down = $page+1; echo "<a href='/contentpage.php?p=$down'>下一页</a>"; echo "<a href='/contentpage.php?p=$pagecount'>尾页</a>"; } ?> </p>
- php 中文字符串统计、截取
- php 截取中文字符串
- PHP截取中文字符串
- php截取中文字符串
- PHP截取中文字符串
- PHP截取中文字符串
- php截取中文字符串
- php中文字符串截取
- php 截取中文字符串
- php截取中文字符串
- PHP中文字符串截取
- 【php】截取中文字符串
- php中文字符串截取
- php截取中文字符串
- PHP 中文字符串截取
- php截取字符串(中文字符截取mb_substr)
- PHP中文字符串截取函数
- php的中文字符串截取
- poj 2777 Count Color
- 从__type_traits知道的c++的一种用法
- ASP.net控件的前缀
- nyoj 45 棋盘覆盖(F(n)=4*F(n-1)+1)直接大数模版
- vc编译,报出DllMain的链接错误的解决方法
- php 中文字符串统计、截取
- 新建记事本默认编码设为UTF-8的方法
- VC项目配置基础
- 使用CGLIB实现AOP功能
- Andoird用户界面设计上手指南:设置字体大小
- Java编码规范
- Qt4.7.0及Qt Creator2.0 beta版安装全程图解
- C#数据类型简写
- qq for linux