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

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


    /**
     * String Functions Reconstruct
     *
     * Copyright (c) 2005 heiyeluren <>
     * Author: heiyeluren <>

     * $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 <>
     */
    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 <>
     */
    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 <>
     */
    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 <>
     */
    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 <>
     */
    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 <>
     */
    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 <>
     */
    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 <>
     */
    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 <>
     */
     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 <>
     */

    /* 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 <>
     */

    /* 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的博客:


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多