仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1249|回复: 20
打印 上一主题 下一主题

[学习教程] PHP网站制作之PHP截取中文字符串的成绩

[复制链接]
逍遥一派 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
开发相册系统过程中就有过这样的问题,因为没有交流好,出现重复工作问题,因为文档没有详细的说明而经常临时问对方。成绩|中文|字符串      以下代码试用于GB2312编码,截取中文字符串是PHP中一个头疼的成绩,处理办法是依据值是不是大于等于128来判别是不是是双字节字符,以免呈现乱码的情形。但中英文夹杂、特别符号等成绩老是存在,如今写一个对照周全的,仅供参考:
   
  法式申明:
  1. len 参数以中文字符为尺度,1len等于2个英文字符,为了模式上悦目些
  2. 假如将magic参数设为false,则中文和英文比量齐观,取相对的字符数
  3. 出格合用于用htmlspecialchars()停止过编码的字符串
  4. 能准确处置GB2312中实体字符形式(𖰰)
   
  法式代码:
   
   
  function FSubstr($title,$start,$len="",$magic=true)
  {
  /**
   * powered by Smartpig
   * mailto:d.einstein@263.net
   */
   
  $length = 0;
  if($len == "") $len = strlen($title);
   
  //判别肇端为不准确地位
  if($start > 0)
  {
   $cnum = 0;
   for($i=0;$i<$start;$i++)
   {
   if(ord(substr($title,$i,1)) >= 128) $cnum ++;
   }
   if($cnum%2 != 0) $start--;
   
   unset($cnum);
  }
   
  if(strlen($title)<=$len) return substr($title,$start,$len);
   
  $alen = 0;
  $blen = 0;
   
  $realnum = 0;
   
  for($i=$start;$i<strlen($title);$i++)
  {
   $ctype = 0;
   $cstep = 0;
   $cur = substr($title,$i,1);
   if($cur == "&")
   {
   if(substr($title,$i,4) == "<")
   {
   $cstep = 4;
   $length += 4;
   $i += 3;
   $realnum ++;
   if($magic)
   {
   $alen ++;
   }
   }
   else if(substr($title,$i,4) == ">")
   {
   $cstep = 4;
   $length += 4;
   $i += 3;
   $realnum ++;
   if($magic)
   {
   $alen ++;
   }
   }
   else if(substr($title,$i,5) == "&")
   {
   $cstep = 5;
   $length += 5;
   $i += 4;
   $realnum ++;
   if($magic)
   {
   $alen ++;
   }
   }
   else if(substr($title,$i,6) == """)
   {
   $cstep = 6;
   $length += 6;
   $i += 5;
   $realnum ++;
   if($magic)
   {
   $alen ++;
   }
   }
   else if(substr($title,$i,6) == "'")
   {
   $cstep = 6;
   $length += 6;
   $i += 5;
   $realnum ++;
   if($magic)
   {
   $alen ++;
   }
   }
   else if(preg_match("/&#(\d+);/i",substr($title,$i,8),$match))
   {
   $cstep = strlen($match[0]);
   $length += strlen($match[0]);
   $i += strlen($match[0])-1;
   $realnum ++;
   if($magic)
   {
   $blen ++;
   $ctype = 1;
   }
   }
   }else{
   if(ord($cur)>=128)
   {
   $cstep = 2;
   $length += 2;
   $i += 1;
   $realnum ++;
   if($magic)
   {
   $blen ++;
   $ctype = 1;
   }
   }else{
   $cstep = 1;
   $length +=1;
   $realnum ++;
   if($magic)
   {
   if(ord($cur) >= 65 && ord($cur) <= 90)
   {
   $blen++;
   }else{
   $alen++;
   }
   }
   }
   }
   
   if($magic)
   {
   if(($blen*2+$alen) == ($len*2)) break;
   if(($blen*2+$alen) == ($len*2+1))
   {
   if($ctype == 1)
   {
   $length -= $cstep;
   break;
   }else{
   break;
   }
   }
   }else{
   if($realnum == $len) break;
   }
  }
   
  unset($cur);
  unset($alen);
  unset($blen);
  unset($realnum);
  unset($ctype);
  unset($cstep);
   
  return substr($title,$start,$length);
  }
   
  呵呵,一会儿把UTF-8编码下的代码也贴出来
一些真正的强人总会搞出新玩意来丢给你,你不学就落后了,也印证了前人的经验,果然是学无止境啊!
山那边是海 该用户已被删除
沙发
发表于 2015-2-4 09:52:53 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
分手快乐 该用户已被删除
板凳
发表于 2015-2-7 19:41:55 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
乐观 该用户已被删除
地板
发表于 2015-2-13 01:50:32 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
金色的骷髅 该用户已被删除
5#
发表于 2015-2-13 21:20:45 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
再见西城 该用户已被删除
6#
发表于 2015-2-23 02:59:00 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
小女巫 该用户已被删除
7#
发表于 2015-2-26 20:46:19 | 只看该作者
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
再现理想 该用户已被删除
8#
发表于 2015-3-7 00:09:52 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
简单生活 该用户已被删除
9#
发表于 2015-3-7 04:09:43 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
谁可相欹 该用户已被删除
10#
发表于 2015-3-10 13:10:09 | 只看该作者
爱上php,他也会爱上你。
飘灵儿 该用户已被删除
11#
发表于 2015-3-12 21:12:29 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
12#
发表于 2015-3-20 02:35:27 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
因胸联盟 该用户已被删除
13#
发表于 2015-3-22 05:06:58 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
灵魂腐蚀 该用户已被删除
14#
发表于 2015-3-27 16:10:44 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
不帅 该用户已被删除
15#
发表于 2015-3-31 05:25:21 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
透明 该用户已被删除
16#
发表于 2015-4-6 22:10:00 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
兰色精灵 该用户已被删除
17#
发表于 2015-4-22 02:12:24 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
爱飞 该用户已被删除
18#
发表于 2015-5-4 11:01:23 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
admin 该用户已被删除
19#
发表于 2015-5-4 18:10:48 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
莫相离 该用户已被删除
20#
发表于 2015-5-12 00:42:39 | 只看该作者
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-14 13:17

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表