[转] hacking unix (2 end)- -| 回首页 | 2005年索引 | - -本blog已全部转移

[原创] 重新实现PHP内置函数

                                      



// 实在无聊,突发奇想,想把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
 */
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
 */
function strcpy($s1, $s2)
{
	if (strlen($s1) == NULL)
		return;
	if (!isset($s2))
		return;

	for ($i=0; $i
 */
 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; $i31 && $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; $i106 && $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

【作者: heiyeluren】【访问统计:】【2005年06月1日 星期三 16:05】【 加入博采】【打印

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=1741318

回复

- 评论人:lucklrj   2006-05-26 22:52:47   

不错。字符串函数系列比较好算,
其他函数就不见得那么好重新构造了。

验证码:   
评论内容: