使用php重新实现PHP脚本引擎内置函数


Posted in PHP onMarch 06, 2007

// 实在无聊,突发奇想,想把PHP里面部分已经提供封装好的函数重新使用PHP实现一遍, 
// 于是便有了下面的代码主要实现了PHP中部分字符串处理函数,同时实现了一些PHP中 
// 没有,但是同样有作用的字符串处理函数同样的这些函数,也能够使用其他语言来实  
// 现,比如用C/VBScript/Perl等等,那么你就能够有一个自己的函数库.              
// 以下函数不一定能够成功运行,只是为了学习而已。                             
//                                                                           
// 如果无特别声明,全部是由于heiyeluren原创,要使用任何函数都请保留作者信息    

/**
 * String Functions Reconstruct 
 *
 * Copyright (c) 2005 heiyeluren <heiyeluren@163.com>
 * Author: heiyeluren <heiyeluren@163.com>

 * $Id: StringFunctions.php,v 0.1 e 2005-5-29 23:21 heiyeluren Exp $
**/

// {{{ strlen()
/**
 * Count string length
 *
 * @param string $str need count length string variable 
 * @return int    return count result
 * @version v0.1
 * @create 2005-5-24
 * @modified 2005-5-24 
 * @author heiyeluren <hyeiyeluren@163.com>
 */
function strlen1($str)
{
 if ($str == '')
  return 0;

 $count = 0;
 while (1)
 {
  if ($str[$count] != NULL)
  {
   $count++;
   continue;
  }
  else
   break;
 }
 return $count;
}
// }}}

// {{{ substr()
/**
 * Get sub string
 *
 * @param string $str need get sub string variable
 * @param int  $start start get sub string
 * @param int  $length need get string length
 * @return string   return sub string
 * @version v0.2
 * @create 2005-5-24
 * @modified 2005-5-25 
 * @author heiyeluren <hyeiyeluren@163.com>
 */
function substr1($str, $start, $length=0)
{
 if ($str == '')
  return;
 if ($start > strlen($str))
  return;
 if (($length != NULL) && ($start > 0) && ($length > strlen($str)-$start))
  return;
 if (($length != NULL) && ($start < 0) && ($length > strlen($str)+$start))
  return;

 if ($length == NULL)
  $length = (strlen($str) - $start);

 if ($start < 0)
 {
  for ($i=(strlen($str)+$start); $i<(strlen($str)+$start+$length); $i++)
  {
   $substr .= $str[$i];
  }
 }

 if ($length > 0)
 {
  for ($i=$start; $i<($start+$length); $i++)
  {
   $substr .= $str[$i];
  }
 }

 if ($length < 0)
 {
  for ($i=$start; $i<(strlen($str)+$length); $i++)
  {
   $substr .= $str[$i];
  }
 }
 return $substr;
}
// }}}

// {{{ strrev()
/**
 * Reversal string order
 *
 * @param string $str need reversal string variable
 * @return string   reversal string
 * @version v0.1
 * @create 2005-5-24
 * @modified 2005-5-24 
 * @author heiyeluren <hyeiyeluren@163.com>
 */
function strrev1($str)
{
 if ($str == '') 
  return 0;
 for ($i=(strlen($str)-1); $i>=0; $i--)
 {
  $rev_str .= $str[$i];
 }
 return $rev_str;
}
// }}}

// {{{ strcmp()
/**
 * String comparison
 *
 * @param string $s1 first string
 * @param string $s2 second string
 * @return int  return -1,str1 < str2; return 1, str1 > str2, str1 = str2, 
 *    return 0, other, return false
 * @version v0.1
 * @create 2005-5-24
 * @modified 2005-5-24 
 * @author heiyeluren <hyeiyeluren@163.com>
 */
function strcmp1($s1, $s2)
{
 if (strlen($s1) < strlen($s2))
  return -1;
 if (strlen($s1) > strlen($s2))
  return 1;

 for ($i=0; $i<strlen($s1); $i++)
 {
  if ($s1[$i] == $s2[$i])
   continue;
  else
   return false;
 }
 return 0;
}
// }}}

// {{{ strchr(), strstr(), strpos()
/**
 * Find first occurrence of a string
 *
 * @param string $str parent string
 * @param string $substr need match sub string
 * @return int  return find sub string at parent string first place, 
 *    f not find, return false
 * @version v0.4
 * @create 2005-5-24
 * @modified 2005-5-29 
 * @author heiyeluren <hyeiyeluren@163.com>
 */
function strchr1($str, $substr)
{
 $m = strlen($str);
 $n = strlen($substr);

 if ($m < $n)
  return false;

 for ($i=0; $i<=($m-$n+1); $i++)
 {
  $sub = substr($str, $i, $n);
  if (strcmp($sub, $substr) == 0)
   return $i;
 }
 return false;
}
// }}}

// {{{ str_replace()
/**
 * Replace all occurrences of the search string with the replacement string
 *
 * @param string $substr  need replace sub string variable
 * @param string $newsubstr new sub string
 * @param string $str  operate parent string
 * @return string   return replace after new parent string
 * @version v0.2
 * @create 2005-5-24
 * @modified 2005-5-29 
 * @author heiyeluren <hyeiyeluren@163.com>
 */
function str_replace1($substr, $newsubstr, $str)
{
 $m = strlen($str);
 $n = strlen($substr);
 $x = strlen($newsubstr);

 if (strchr($str, $substr) == false)
  return false;

 for ($i=0; $i<=($m-$n+1); $i++)
 {
  $i = strchr($str, $substr);
  $str = str_delete($str, $i, $n);
  $str = str_insert($str, $i, $newstr);
 }
 return $str;
}
// }}}

/************ 以下串处理函数是PHP中没有的,自己写着玩 ***************/

// {{{ insert_str(), delete_str(), index_str()
/**
 * Basic string operate
 *
 * @param string $str need get sub string variable
 * @param int  $start start get sub string
 * @param int  $length need get string length
 * @return string  return sub string
 * @version v0.1
 * @create 2005-5-24
 * @modified 2005-5-24 
 * @author heiyeluren <hyeiyeluren@163.com>
 */
function str_insert($str, $i, $substr)
{

 for($j=0; $j<$i; $j++)
 {
  $startstr .= $str[$j];
 }

 for ($j=$i; $j<strlen($str); $j++)
 {
  $laststr .= $str[$j];
 }
 $str = ($startstr . $substr . $laststr);

 return $str;
}

function str_delete($str, $i, $j)
{
 for ($c=0; $c<$i; $c++)
 {
  $startstr .= $str[$c];
 }

 for ($c=($i+$j); $c<strlen($str); $c++)
 {
  $laststr .= $str[$c];
 }

 $str = ($startstr . $laststr);

 return $str;
}
// }}}

// {{{ strcpy()
/**
 * Use designate sub string  replace string
 *
 * @param string $str need get sub string variable
 * @param int  $start start get sub string
 * @param int  $length need get string length
 * @return string  return sub string
 * @version v0.1
 * @create 2005-5-27
 * @modified 2005-5-27 
 * @author heiyeluren <hyeiyeluren@163.com>
 */
function strcpy($s1, $s2)
{
 if (strlen($s1) == NULL)
  return;
 if (!isset($s2))
  return;

 for ($i=0; $i<strlen($s1); $i++)
 {
  $s2[] = $s1[$i];
 }
 return $s2;
}
// }}}

// {{{ strcat()
/**
 * Use designate sub string  replace string
 *
 * @param string $str need get sub string variable
 * @param int  $start start get sub string
 * @param int  $length need get string length
 * @return string  return sub string
 * @version v0.1
 * @create 2005-5-27
 * @modified 2005-5-27 
 * @author  heiyeluren <hyeiyeluren@163.com>
 */
 function strcat($s1, $s2)
 {
 if (!isset($s1))
  return;
 if (!isset($s2))
  return;

 $newstr = $s1 . $s2;

 return $newsstr;
 }
// }}}

// {{{ php_encode(), php_decode()
/**
 * Simple string encode/decode function
 *
 * @param string $str need code/encode string variable 
 * @return string  code/encode after string
 * @version v0.2
 * @create 2005-3-11
 * @modified 2005-5-24 
 * @author heiyeluren <hyeiyeluren@163.com>
 */

/* String encode function */
function php_encode($str)
{
 if ($str=='' && strlen($str)>128)
  return false;

 for($i=0; $i<strlen($str); $i++)
 {
  $c = ord($str[$i]);
  if ($c>31 && $c<107)
   $c += 20;
  if ($c>106 && $c<127)
   $c -= 75;
  $word = chr($c);

  $s .= $word;
 } 
 return $s; 
}

/* String decode function */
function php_decode($str)
{
 if ($str=='' && strlen($str)>128)
  return false;

 for($i=0; $i<strlen($str); $i++)
 {
  $c = ord($word);
  if ($c>106 && $c<127)
   $c = $c-20;
  if ($c>31 && $c<107)
   $c = $c+75;
  $word = chr($c);

  $s .= $word;
 } 
 return $s; 
}
// }}}

// {{{ php_encrypt(), php_decrypt()
/**
 * Simple string encrypt/decrypt function
 *
 * @param string $str need crypt string variable 
 * @return string  encrypt/decrypt after string
 * @version v0.1
 * @create 2005-5-27
 * @modified 2005-5-29 
 * @author heiyeluren <hyeiyeluren@163.com>
 */

/* define crypt key */
$encrypt_key = 'abcdefghijklmnopqrstuvwxyz1234567890';
$decrypt_key = 'ngzqtcobmuhelkpdawxfyivrsj2468021359';

/* String encrypt function */
function php_encrypt($str)
{
 global $encrypt_key, $decrypt_key;

 if (strlen($str) == 0)
  return false;

 for ($i=0; $i<strlen($str); $i++)
 {
  for ($j=0; $j<strlen($encrypt_key); $j++)
  {
   if ($str[$i] == $encrypt_key[$j])
   {
    $enstr .= $decrypt_key[$j];
    break;
   }
  }
 }
 return $enstr;
}

/* String decrypt function */
function php_decrypt($str)
{
 global $encrypt_key, $decrypt_key;

 if (strlen($str) == 0)
  return false;

 for ($i=0; $i<strlen($str); $i++)
 {
  for ($j=0; $j<strlen($decrypt_key); $j++)
  {
   if ($str[$i] == $decrypt_key[$j])
   {
    $enstr .= $encrypt_key[$j];
    break;
   }
  }
 }
 return $enstr;
}
// }}}

如果代码不清晰的话,建议查看一下连接,是我在blogchina的博客:

http://heiyeluren.blogchina.com/1741318.html

PHP 相关文章推荐
PHP 内存缓存加速功能memcached安装与用法
Sep 03 PHP
php面向对象全攻略 (十) final static const关键字的使用
Sep 30 PHP
php操作sqlserver关于时间日期读取的小小见解
Nov 29 PHP
PHP调用Twitter的RSS的实现代码
Mar 10 PHP
php eval函数用法 PHP中eval()函数小技巧
Oct 31 PHP
php抽奖小程序的实现代码
Jun 18 PHP
PHP-Fcgi下PHP的执行时间设置方法
Aug 02 PHP
php自定义session示例分享
Apr 22 PHP
php提示Warning:mysql_fetch_array() expects的解决方法
Dec 16 PHP
php实现读取手机客户端浏览器的类
Jan 09 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
Nov 15 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 PHP
15种PHP Encoder的比较
Mar 06 #PHP
可定制的PHP缩略图生成程式(需要GD库支持)
Mar 06 #PHP
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
Mar 06 #PHP
收集的php编写大型网站问题集
Mar 06 #PHP
用PHP实现Ftp用户的在线管理的代码
Mar 06 #PHP
个人站长制做网页常用的php代码
Mar 03 #PHP
NOD32 v2.70.32 简体中文封装版 提供下载了
Feb 27 #PHP
You might like
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
php解压缩zip和rar压缩包文件的方法
2019/07/10 PHP
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
JS 控件事件小结
2012/10/31 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
动态加载jquery库的方法
2014/02/12 Javascript
JavaScript的作用域和块级作用域概念理解
2014/09/21 Javascript
jQuery中:focus选择器用法实例
2014/12/30 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
JavaScript Array对象详解
2016/03/01 Javascript
jQuery新窗口打开外链接
2016/07/21 Javascript
基于JavaScript实现Tab选项卡切换效果
2016/11/24 Javascript
js实现自动图片轮播代码
2017/03/22 Javascript
vue 2.0组件与v-model详解
2017/03/27 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
JS+HTML实现的圆形可点击区域示例【3种方法】
2018/08/01 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
JS继承定义与使用方法简单示例
2020/02/19 Javascript
React 条件渲染最佳实践小结(7种)
2020/09/27 Javascript
Python类的动态修改的实例方法
2017/03/24 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
Python浅复制中对象生存周期实例分析
2018/04/02 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
2018/07/26 Python
python3.7 sys模块的具体使用
2019/07/22 Python
Pycharm 安装 idea VIM插件的图文教程详解
2020/02/21 Python
Python如何将字符串转换为日期
2020/07/31 Python
python 绘制正态曲线的示例
2020/09/24 Python
Python 中如何使用 virtualenv 管理虚拟环境
2021/01/21 Python
日本最大美瞳直送网:Morecontact(中文)
2019/04/03 全球购物
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
中学生学习保证书
2015/02/26 职场文书
复试通知单模板
2015/04/24 职场文书