新客网
首页 | 新闻 | 系统·网络·服务器·安全 | 工具·办公 | 编程·数据库 | 图象·网页·运营 | 硬件·存储 | 专题教程 | 论坛·old
 → 当前位置:首页 > 教程 > 编程开发 > PHP教程 > 正文

PHP中英文混合排版中处理字符串常用的函数

XKER.COM   2006-10-28 8:38:32  来源:不详  点击:

  /*
  我们在处理中文数据时,经常要处理一些情况,下面就是针对
  这些情况,我做的一些函数,已经用在了实践中
  
  */
  
  # 判断某个位置是中文字符的左还是右半部分,或不是中文
  # 返回值 -1 左 0 不是中文字符 1 右
  # 用法
  /*
  $a = 'this is 中文';
  print is_chinese($a, 1); // 0
  print is_chinese($a,8); // -1
  print is_chinese($a,9); // 1
  */
  function is_chinese(&$str, $location) {
  $ch = true;
  $i = $location;
  while(ord($str[$i])>0xa0 && $i >= 0) {
  $ch = !$ch;
  $i --;
  }
  
  if($i != $location) {
  $f_str = $ch ? 1: -1;
  }
  else {
  $f_str = false;
  }
  
  return $f_str;
  }
  
  # 中文字符串倒置函数
  # 如果一个将一个有中文的字符串用strrev倒过来,就会产生乱码
  /*
  print cstrrev('this is 中文'); // 文中 si siht
  */
  
  function cstrrev(&$str) {
  $long = strlen($str);
  for($f_str='', $chinese=false, $i=$long-1; $i>=0; $i--) {
  if(ord($str[$i]) > 0xa0) {
  $chinese = ! $chinese;
  if($chinese == false) {
  $f_str .= $str[$i].$str[$i+1];
  }
  }
  else {
  $f_str .= $str[$i];
  }
  }
  return $f_str;
  }
  /* 中文字符串截取函数
  一些中文字符串截取函数经常有一些问题,例如在一些自动换行程序中
  $a=“1中2”;
  经两次截取后,
  csubstr($str,$a,0,2);
  csubstr($str, $a, 2,2)
  由于载取位置指向“中”的右字节,可能会是这样的结果
  1, 2
  用本函数会产生正确的结果
  1中, 2
  */
  # start 开始位置,从0开始
  # long = 0 则从start 一直取到字符串尾
  # ltor = true 时从左到右取字符,false 时到右到左取字符
  # $cn_len 中文字符按字节取还是字数取,如果按字数取,则一个中文当一个字节计算
    www.xker.com()
  function csubstr(&$str, $start=0, $long=0, $ltor=true, $cn_len=2) {
  if($long == 0) $long = strlen($str);
  if($ltor == false) $str = cstrrev($str);
  
  if($cn_len == 1) {
  
  for($i=0, $fs=0; $i<$start; $fs++)
  $i += (ord($str[$fs]) <= 0xa0) ? 1 : 0.5;
  for($i=0, $fe=$fs; $i<$long; $fe++)
  $i += (ord($str[$fe]) <= 0xa0) ? 1 : 0.5;
  $long = $fe - $fs;
  
  }
  else {
  
  $fs = (is_chinese($str, $start) == 1) ? $start - 1 : $start;
  $fe = $long + $start - 1;
  $end = ( is_chinese($str, $fe) == -1 ) ? $fe -1 : $fe;
  $long = $end - $fs + 1;
  }
  
  $f_str = substr($str, $fs, $long);
  if($ltor == false) $f_str = cstrrev($f_str);
  
  return $f_str;
  }
  
  # 取左字符串
  # 当cn_len == 2 时 $long 取左边多少个字,反之则取左边多少个字节
  function cleft(&$str, $long, $cn_len=2) {
  $f_str = csubstr($str, 0, $long, true, $cn_len);
  return $f_str;
  }
  
  # 取右字符串
  function cright(&$str, $long, $cn_len=2) {
  $f_str = cstrrev($str);
  $f_str = csubstr($f_str, 0, $long, true, $cn_len);
  $f_str = cstrrev($f_str);
  return $f_str;
  }
  # 对含有中文字符的文章分行格式化
  # 再也不会发生因换行问题而产生的种种问题啦!!!
  # 注:文章的每一行必须用 n (chr(13))进行分行
  # $width 每行多少字符
  # $br 将 每行用什么字符当结束符
  
  function ctext_wrap(&$text, $width=60, $br="

本新闻共2页,当前在第1页  1  2  

上一篇教程:多个字段,大量记录的插入操作技巧(PHP)
下一篇教程:LINUX环境中用PHP构建网站:搜索引擎的实现
收藏本文】 【我要投稿】 【打印本文】 【论坛讨论】 【关闭窗口

相关文章
·电子邮局PHP应用篇——POP3邮件的收取(二)·电子邮局PHP应用篇——POP3邮件的收取(一) 
·PHP的应用——聊天室开发完全手册(三)·PHP的应用——聊天室开发完全手册(二) 
·PHP的应用——聊天室开发完全手册(一)·LINUX环境中用PHP构建网站:用递归函数写论坛
·LINUX环境中用PHP构建网站:用户的登入认证·LINUX环境中用PHP够建网站:新闻发布系统
·LINUX环境中用PHP构建网站:搜索引擎的实现·用 Oracle AS 10g 为PHP提供的一次性登录
·多个字段,大量记录的插入操作技巧(PHP)·用PHP构建一个简易监视引擎
·php高手进阶:写一个用户在线显示的程序·在PHP开发过程中实现验证码一法
·在PHP中实现文件的上传功能·Linux下用PHP4连接ORACLE8I的方法

学院文章搜索
  
推荐文章
·嵌入式Linux操作系统启动信
·网页设计配色应用实例剖析
·如何安全安装Vista系统
·Photoshop巧绘制非洲菊
·简简单单用软件给MP3掐头去
·ASP初学者常用源代码总结篇
·利用异常表处理Linux内核态
·Linux命令行下如何配置nVI
·如何实现Linux与windows的
·秘籍:右键菜单终极锤炼术
阅读排行
·免费代理IP(每日更新)
·流氓网站招招看 详细剖析恶
·轻松恢复硬盘数据 EasyRec
·DOS下对系统重新进行分区
·清除猖狂的Sxs.exe病毒
·DOS常用命令
·编程过把瘾:自己动手写操
·windows下如何修改右键菜单
·DOS下常用的相关网络命令
·SQL Server安装文件挂起错
专题教程
·MySQL 专题
·数据恢复指南 专题
·Web服务器专题
·DB2 9数据库专题
·ghost教程 专题
·局域网技术专题
·虚拟机专题
·CDN加速技术专题
·注册表教程专题
·电脑技巧 专题
最新文章
·电子邮局PHP应用篇——POP
·电子邮局PHP应用篇——POP
·PHP的应用——聊天室开发完
·PHP的应用——聊天室开发完
·PHP的应用——聊天室开发完
·LINUX环境中用PHP构建网站
·LINUX环境中用PHP构建网站
·LINUX环境中用PHP够建网站
·LINUX环境中用PHP构建网站
·用 Oracle AS 10g 为PHP提
设为首页 - 加入收藏 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
Copyright © 2003 - 2006 XKER Inc. All Rights Reserved
新客网 版权所有