资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 编程开发 >
Advertisement
文章正文

介绍一组中文处理工具函数_编程

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   
  • 一个取得文件扩展名的函数(不过函数名叫做取得FILETYPE呢!呵呵!) 
  • 看过google的搜索吗?搜索共花了多少时间?这里有一个类可以统计脚本执行时间的。 
  • 一个有趣的JS:随机效果文本-定时的从一段文本中随机选择一个字符,改变颜色。可以学习一下JS。 
  • 关于那个SMTP类及一个例子 
  • PHP中的DOMXML函数--可惜没有例子--等有空到老外那边[偷]来 
  • PHP4.03的新功能-增加了对OvrimosSQL的支持(转载)虽然PHP里对数据库的支持是越来越多。可是我还... 
  • CGI安全漏洞资料速查v1.0(转二) 
  • 转载老外编写的一个maillist源代码 
  • Compilingphpwithcrypt() 
  • 这是我在Linux6.2下APACHE+PHP4+MYSQL的安装脚本。大家看看吧!写得很简陋,不过简化了我的不少工作。 
  • 页面导航:

    正文内容:
    <?
    /* 中文处理工具函数
    --- 空格 ---
     string gbspace(string) --------- 每个中文字之间加空格
     string gbunspace(string) ------- 每个中文字之间的空格清除
     string clear_space(string) ------- 用来清除多余的空格

    --- 转换 ---
     string gbcase(string,offset) --- 将字符串内的中英文字转换大小写
       offset : "upper" - 字符串全转为大写 (strtoupper)
        "lower" - 字符串全转为小写 (strtolower)
        "ucwords" - 将字符串每个字第一个字母改大写 (ucwords)
        "ucfirst" - 将字符串第一个字母改大写 (ucfirst)
     string gbrev(string) ----------- 颠倒字符串

    --- 文字检查 ---
     int gb_check(string) ----------- 检查字符串内是否有 gb 字,有会返回 true,
        否则会返回false
     int gb_all(string) ------------- 检查字符串内所有字是否有 gb 字,是会返回 true,
        否则会返回false
     int gb_non(string) ------------- 检查字符串内所有字并不是 gb 字,是会返回 true,
        否则会返回false
     int gblen(string) -------------- 返回字符串长度(中文字只计一字母)

    --- 查找、取代、提取 ---
     int/array gbpos(haystack,needle,[offset]) ---- 查找字符串 (strpos)
       offset : 留空 - 查找第一个出现的位置
        int - 由该位置搜索出现的第一个位置
        "r" - 查找最后一次出现的位置 (strrpos)
        "a" - 将所有查找到的字储存为数组(返回 array)

     string gb_replace(needle,str,haystack) -- 查找与取代字符串 (str_replace)
     string gb_replace_i(needle,str_f,str_b,haystack) -- 不检查大小写查找与取代字符串
        needle - 查找字母
        str - 取代字母 ( str_f - 该字母前, str_b 该字母后)
        haystack - 字符串

     string gbsubstr(string,start,[length]) -- 从string提取出由开始到结尾或长度
         length的字符串。
         中文字只计一字母,可使用正负数。
     string gbstrnear(string,length) -- 从 string提取最接近 length的字符串。
         length 中 中文字计2个字母。

    --- 注意 ---
     如使用由 form 返回的字符串前,请先替字符串经过 stripslashes() 处理,除去多余的 \ 。

     用法:在原 php 代码内加上:
     include ("gb.inc");
     即可使用以上工具函数。
    */

    function gblen($string) {
     $l = strlen($string);
     $ptr = 0;
     $a = 0;
     while ($a < $l) {
     $ch = substr($string,$a,1);
     $ch2 = substr($string,$a+1,1);
     if (ord($ch) >= hexdec("0x81") && ord($ch2) >= hexdec("0x40")) {
     $ptr++;
     $a += 2;
     } else {
     $ptr++;
     $a++;
     } // end if
     } // end while

     return $ptr;
    }

    function gbsubstr($string,$start,$length) {
     if (!is_int($length) && $length != "") {
     return "错误:length 值错误(必须为数值)。<br>";
     } elseif ($length == "0") {
     return "";
     } else {
     $l = strlen($string);
     $a = 0;
     $ptr = 0;
     $str_list = array();
     $str_list2 = array();
     while ($a < $l) {
     $ch = substr($string,$a,1);
     $ch2 = substr($string,$a+1,1);
     if (ord($ch) >= hexdec("0x81") && ord($ch2) >= hexdec("0x40")) {
     $str_list[$ptr] = $a;
     $str_list2[$ptr] = $a+1;
     $ptr++;
     $a += 2;
     } else {
     $str_list[$ptr] = $a;
     $str_list2[$ptr] = $a;
     $ptr++;
     $a++;
     } // end if
     } // end while

     if ($start > $ptr || -$start > $ptr) {
     return;
     } elseif ($length == "") {
     if ($start >= 0) { // (text,+)
     return substr($string,$str_list[$start]);
     } else { // (test,-)
     return substr($string,$str_list[$ptr + $start]);
     }
     } else {

     if ($length > 0) { // $length > 0


     if ($start >= 0) { // (text,+,+)
      if (($start + $length) >= count($str_list2)) {
      return substr($string,$str_list[$start]);
      } else { //(text,+,+)
      $end = $str_list2[$start + ($length - 1)] - $str_list[$start] +1;
      return substr($string,$str_list[$start],$end);
      }

     } else { // (text ,-,+)
      $start = $ptr + $start;
      if (($start + $length) >= count($str_list2)) {
      return substr($string,$str_list[$start]);
      } else {
      $end = $str_list2[$start + ($length - 1)] - $str_list[$start] +1;
      return substr($string,$str_list[$start],$end);
      }
     }

     } else { // $length < 0
     $end = strlen($string) - $str_list[$ptr+$length];
     if ($start >= 0) { // (text,+,-) {
      return substr($string,$str_list[$start],-$end);
     } else { //(text,-,-)
      $start = $ptr + $start;
      return substr($string,$str_list[$start],-$end);
     }

     } // end of length > / < 0

     }
     } // end if
    }

    function gb_replace($needle,$string,$haystack) {
     $l = strlen($haystack);
     $l2 = strlen($needle);
     $l3 = strlen($string);
     $news = "";
     $skip = 0;
     $a = 0;
     while ($a < $l) {
     $ch = substr($haystack,$a,1);
     $ch2 = substr($haystack,$a+1,1);
     if (ord($ch) >= hexdec("0x81") && ord($ch2) >= hexdec("0x40")) {
     if (substr($haystack,$a,$l2) == $needle) {
      $news .= $string;
      $a += $l2;
     } else {
      $news .= $ch.$ch2;
      $a += 2;
     }
     } else {
     if (substr($haystack,$a,$l2) == $needle) {
      $news .= $string;
      $a += $l2;
     } else {
      $news .= $ch;
      $a++;
     }
     } // end if
     } // end while
     return $news;
    }

    function gb_replace_i($needle,$str_f,$str_b,$haystack) {

     $l = strlen($haystack);
     $l2 = strlen($needle);
     $l3 = strlen($string);
     $news = "";
     $skip = 0;
     $a = 0;
     while ($a < $l) {
     $ch = substr($haystack,$a,1);
     $ch2 = substr($haystack,$a+1,1);
     if (ord($ch) >= hexdec("0x81") && ord($ch2) >= hexdec("0x40")) {
     if (gbcase(substr($haystack,$a,$l2),"lower") == gbcase($needle,"lower")) {
      $news .= $str_f . substr($haystack,$a,$l2) . $str_b;
      $a += $l2;
     } else {
      $news .= $ch.$ch2;
      $a += 2;
     }
     } else {
     if (gbcase(substr($haystack,$a,$l2),"lower") == gbcase($needle,"lower")) {
      $news .= $str_f . substr($haystack,$a,$l2) . $str_b;
      $a += $l2;
     } else {
      $news .= $ch;
      $a++;
     }
     } // end if
     } // end while
     return $news;
    }



    function gbpos($haystack,$needle,$offset) {
     if (!is_int($offset)) {
     $offset = strtolower($offset);
     if ($offset != "" && $offset != "r" && $offset != "a") {
     return "错误:offset 值错误。<br>";
     }
     }
     $l = strlen($haystack);
     $l2 = strlen($needle);
     $found = false;
     $w = 0; // word
     $a = 0; // start

     if ($offset == "" || $offset == "r") {
     $atleast = 0;
     $value = false;
     } elseif ($offset == "a") {
     $value = array();
     $atleast = 0;
     } else {
     $value = false;
     $atleast = $offset;
     }
     while ($a < $l) {
     $ch = substr($haystack,$a,1);
     $ch2 = substr($haystack,$a+1,1);
     if (ord($ch) >= hexdec("0x81") && ord($ch2) >= hexdec("0x40") && $skip == 0) {
     if (substr($haystack,$a,$l2) == $needle) {
      if ($offset == "r") {
      $found = true;
      $value = $w;
      } elseif ($offset == "a") {
      $found = true;
      $value[] = $w;
      } elseif (!$value) {
      if ($w >= $atleast) {
      $found = true;
      $value = $w;
      }
      }
     }
     $a += 2;
     } else {
     if (substr($haystack,$a,$l2) == $needle) {
      if ($offset == "r") {
      $found = true;
      $value = $w;
      } elseif ($offset == "a") {
      $found = true;
      $value[] = $w;
      } elseif (!$value) {
      if ($w >= $atleast) {
      $found = true;
      $value = $w;
      }
      }
     }
     $a++;
     }
     $w++;
     } // end of while
     if ($found) {
     return $value;
     } else {
     return $false;
     }
    // } // end of while

    }

    function gbrev($text) {
     $news = "";
     $l = strlen($text);
     $gb = 0;
     $a = 0;
     while ($a < $l) {
     $ch = substr($text,$a,1);
     $ch2 = substr($text,$a+1,1);
     if (ord($ch) >= hexdec("0x81") && ord($ch2) >= hexdec("0x40") && $skip == 0) {
     $a += 2;
     $news = $ch . $ch2 . $news;
     } else {
     $news = $ch . $news;
     $a++;
     }
     }
     return $news;
    }

    function gb_check($text) {
     $l = strlen($text);
     $a = 0;
     while ($a < $l) {
     $ch = substr($text,$a,1);
     $ch2 = substr($text,$a+1,1);
     if (ord($ch) >= hexdec("0x81") && ord($ch2) >= hexdec("0x40")) {
     return true;
     } else {
     return false;
     }
     }
    }

    function gb_all ($text) {
     $l = strlen($text);
     $all = 1;
     $a = 0;
     while ($a < $l) {
     $ch = substr($text,$a,1);
     $ch2 = substr($text,$a+1,1);
     if (ord($ch) >= hexdec("0x81") && ord($ch2) >= hexdec("0x40")) {
     $a += 2;
     } else {
     $a++;
     $all = 0;
     }
     }
     if ($all == 1) {
     return true;
     } else {
     return false;
     }
    }

    function gb_non ($text) {
     $l = strlen($text);
     $all = 1;
     $a = 0;
     while ($a < $l) {
     $ch = substr($text,$a,1);
     $ch2 = substr($text,$a+1,1);
     if (ord($ch) >= hexdec("0x81") && ord($ch2) >= hexdec("0x40")) {
     $a += 2;
     $all = 0;
     } else {
     $a++;
     }
     }
     if ($all == 1) {
     return true;
     } else {
     return false;
     }
    }


    function gbcase ($text,$case) {
     $case = strtolower($case);
     if ($case != "upper" && $case != "lower" && $case != "ucwords" && $case != "ucfirst") {
     return "函数用法错误。 $case";
     } else {
     $ucfirst = 0;
     $ucwords = 0;
     $news = "";
     $l = strlen($text);
     $gb = 0;
     $english = 0;

     $a = 0;
     while ($a < $l) {

     $ch = substr($text,$a,1);
     if ($gb == 0 && ord($ch) >= hexdec("0x81")) {

     $gb = 1;
     $english = 0;
     $news .= $ch;
     $ucwords = 0;
     
     } elseif ($gb == 1 && ord($ch) >= hexdec("0x40") && $english == 0) {
     $news .= "$ch"; 
     $ucwords = 0;
     $gb = 0;

     } else {
     if ($case == "upper") {
     $news .= strtoupper($ch);
     } elseif ($case == "lower") {
     $news .= strtolower($ch);
     } elseif ($case == "ucwords") {
     if ($ucwords == 0) {
      $news .= strtoupper($ch);
     } else {
      $news .= strtolower($ch);
     }
     $ucwords = 1;
     } elseif ($case == "ucfirst") {
     if ($ucfirst == 0) {
      $news .= strtoupper($ch);
      $ucfirst = 1;
     } else {
      $news .= strtolower($ch);
      $ucfirst = 1;
     }
     } else {
     $news .= $ch;
     }
     if ($ch == " " || $ch == "\n") {
     $ucwords = 0;
     }
     $english = 1;
     $gb = 0;
     
     }

     $a++;
     
     } // end of while
     return $news;
     } // end else
    }



    function gbspace ($text) {

     $news = "";
     $l = strlen($text);
     $gb = 0;
     $english = 0;

     $a = 0;
     while ($a < $l) {


     $ch = substr($text,$a,1);
     $ch2 = substr($text,$a+1,1);
     if (!($ch == " " && $ch2 == " ")) {
     if ($gb == 0) {
     if (ord($ch) >= hexdec("0x81")) {

     if ($english == 1) {
      if ((substr($text,$a-1,1) == " ") || (substr($text,$a-1,1) == "\n")) {
      $news .= "$ch";
      } else {
      $news .= " $ch";
      }
      $english = 0;
      $gb = 1;
     } else {
      $gb = 1;
      $english = 0;
      $news .= $ch;
     }
     } else {
     $english = 1;
     $gb = 0;
     $news .= $ch;
     }
     
     } else {
     if (ord($ch) >= hexdec("0x40")) {
     if ($english == 0) {
      if ((substr($text,$a+1,1) == " ")|| (substr($text,$a+1,1) == "\n")) {
      $news .= "$ch"; 
      } else {
      $news .= "$ch ";
      }
     } else {
      $news .= " $ch";
     }
     } else {
     $english = 1;
     $news .= "$ch";
     }
     $gb = 0;
     }
     }
     $a++;
     } // end of while

     // chk 1 & last is space

     $l = strlen($news);
     if (substr($news,0,1) == " ") {
     $news = substr($news,1);
     }
     $l = strlen($news);
     if (substr($news,$l-1,1) == " ") {
     $news = substr($news,0,$l-1);
     }
     return $news;
    }

    function gbunspace($text) {
     $news = "";
     $l = strlen($text);
     $a = 0;
     $last_space = 1;
     while ($a < $l) {
     
     $ch = substr($text,$a,1);
     $ch2 = substr($text,$a+1,1);
     $ch3 = substr($text,$a+2,1);
     if (($a + 1) == $l ) {
     $last_space = 1;
     }
     if ($ch == " ") {
     if ($last_space == 0) {
     if (ord($ch2) >= hexdec("0x81") && ord($ch3) >= hexdec("0x40")) {
      if ($chi == 0) {
      $news .= " ";
      $last_space = 1;
      }
      $chi=1;


     } elseif ($ch2 != " ") {
      $news .= " ";
      $chi = 0;
      $last_space = 1;
     }
     }
     } else {
     if (ord($ch) >= hexdec("0x81") && ord($ch2) >= hexdec("0x40")) {
      $chi = 1;
      $a++;
      $news .= $ch . $ch2;
      $last_space = 0;

     } else {
      $chi = 0;
      $news .= $ch;
      $last_space = 0;
     }

     }
     $a++;
     }
     // chk 1 & last is space

     $l = strlen($news);
     if (substr($news,0,1) == " ") {
     $news = substr($news,1);
     }
     $l = strlen($news);
     if (substr($news,$l-1,1) == " ") {
     $news = substr($news,0,$l-1);
     }
     return $news;



    } // end of function

    function gbstrnear($text,$length) {

    $tex_len = strlen($text);
    $a = 0;
    $w = "";
    while ($a < $tex_len) {
     $ch = substr($text,$a,1);
     $ch2 = substr($text,$a+1,1);
     if (gb_all($ch.$ch2)) {
     $w .= $ch.$ch2;
     $a=$a+2;
     } else {
     $w .= $ch;
     $a++;
     }
     if ($a == $length || $a == ($length - 1)) {
     $a = $tex_len;
     }
    }
    return $w;
    } // end of function

    function clear_space($text) {
     $t = "";
     for ($a=0;$a<strlen($text);$a++) {
     $ch = substr($text,$a,1);
     $ch2 = substr($text,$a+1,1);
     if ($ch == " " && $ch2 == " ") {
     } else {
     $t .= $ch;
     }
     }
     return $t;
    }


    ?>

     

     
    热门推荐笔记本: LG笔记本
    相关文章:
    webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
    ©2007 popbb.net All Rights Reserved