検索
ホームページphp教程php手册php を使用して PHP スクリプト エンジンの組み込み関数を再実装する



// 本当に退屈なので、PHP を使用してカプセル化された関数の一部を PHP で再実装することを突然思いつきました。そこで、主に次のコードの一部を実装します。 PHP の関数は、PHP では利用できないいくつかの文字列処理関数も実装しますが、これらの同じ関数は C/VBScript/Perl などの他の言語でも実装できます。 , など、独自の関数ライブラリを作成できます。
// 以下の関数は学習目的のため、必ずしも正常に動作するとは限りません。
//

/**
* 文字列関数 再構築
*
* Copyright (c) 2005 heiyeluren
* 著者: 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
 */
関数 strlen1($str)
{
if ($str == '')
return 0;

$count = 0; > {
if ($str[$count] != NULL)
{
$count;
継続
}
else
}
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長さ
* @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 strlen($ str) $start))
return;

if ($length == NULL)
$length = (strlen($str) - $start); >
if ( $start {
for ($i=(strlen($str) $start); $i {
$substr .= $str[$i];
}
}

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

if ($length {
for ($i=$start; $i {
$substr .= $str[$ i];
}
}
return $substr;
// }}}


// {{{ strrev()
/**
* 反転文字列順序
*
* @param 文字列 $str 反転文字列変数が必要
* @return 文字列 反転文字列
* @version v0.1
* @create 2005- 5-24
* @modified 2005-5-24
* @author heiyeluren
 */
function strrev1($str)
{
if ($str == '')
0 を返す;
for ($i=(strlen($str)-1); $i>=0; $i--)
{
$rev_str .= $str[$i];
}
return $rev_str;
}
// }}}


// {{{ strcmp()
/**
* 文字列の比較
*
* @param 文字列 $s1 最初の 文字列
* @param 文字列 $s2 2番目の文字列
* @return int 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) return -1;
if (strlen($s1) > strlen($s2))
return 1;

for ($i=0; $i {
if ($s1[$i] == $s2[$i])
続行します。
else
return false;
}
0 を返す;
}
// }}}


// {{{ strchr(), strstr(), strpos()
/**
* 文字列の最初の出現を検索
*
* @param string $str parent string
* @param string $substr need match sub string
* @return int return find sub string at親文字列の最初の位置、
* f 見つからない場合、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 return false;

for ($i=0; $i {
$sub = substr($str, $i, $n) ;
if (strcmp($sub, $substr) == 0)
return $i;
}
falseを返します。
}
// }}}


// {{{ str_replace()
/**
* 検索文字列のすべての出現箇所を置換文字列で置き換えます
*
* @param 文字列 $substr サブ文字列変数を置換する必要があります
* @param 文字列 $newsubstr 新しいサブ文字列
* @ 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 {
$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()
/**
* 基本的な文字列操作
*
* @param 文字列 $str need get sub string variable
* @param int $start start get sub string
* @param int $length need get string長さ
* @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 {
$startstr .= $str[$j];
}

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

$str; を返す
}


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

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

$str = ($startstr . $laststr);

$str; を返す
}
// }}}


// {{{ strcpy()
/**
* 指定のサブ文字列を使用して文字列を置き換えます
*
* @param 文字列 $str サブ 文字列変数を取得する必要があります
* @param int $start start get サブ 文字列
* @param int $length need get string length
* @return string return sub string
* @version v0.1
* @create 2005-5-27
* @modified 2005-5-27
* @著者 heiyeluren
 */
function strcpy($s1, $ s2)
{
if (strlen($s1) == NULL)
return;
if (!isset($s2))
return;

for ($i=0; $i {
$s2[] = $s1[$i];
}
$s2 を返す;
}
// }}}


// {{{ strcat()
/**
* 指定のサブ文字列を使用して文字列を置き換えます
*
* @param 文字列 $str サブ 文字列変数を取得する必要があります
* @param int $start start get サブ 文字列
* @param int $length need get string length
* @return string return sub string
* @version v0.1
* @create 2005-5-27
* @modified 2005-5-27
* @著者 heiyeluren
 */
function strcat($s1, $ s2)
{
if (!isset($s1))
return;
if (!isset($s2))
return;

$newsstr = $s1 。 $s2;

$newsstr; を返す
}
// }}}


// {{{ php_encode(), php_decode()
/**
* 単純な文字列のエンコード/デコード関数
*
* @param 文字列 $str コード/エンコード 文字列変数が必要
* @return 文字列 コード/文字列後のエンコード
* @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 {
$c = ord($str[$i]);
if ($c>31 && $c $c = 20;
if ($c>106 && $c $c -= 75;
$word = chr($c);

$s .= $word;
}
$s を返す; 
}


/* 文字列デコード関数 */
関数 php_decode($str)
{
if ($str=='' && strlen($str) >128)
falseを返します。

for($i=0; $i {
$c = ord($word);
if ($c>106 && $c $c = $c-20;
if ($c>31 && $c $c = $c 75;
$word = chr($c);

$s .= $word;
}
$s を返す; 
}
// }}}


// {{{ php_encrypt(), php_decrypt()
/**
* 単純な文字列の暗号化/復号化関数
*
* @param 文字列 $str 暗号化文字列変数が必要
* @return 文字列 文字列の後に暗号化/復号化する
* @version v0.1
* @create 2005-5-27
* @modified 2005-5-29
* @author heiyeluren
 */

/* 暗号化キーを定義します */
$encrypt_key = 'abcdefghijklmnopqrstuvwxyz1234567890';
$decrypt_key = 'ngzqtcobmuhelkpdawxfyivrsj2468021359';

/* 文字列暗号化関数 */
関数 php_encrypt($str)
{
グローバル $encrypt_key, $decrypt_key;

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

for ($i=0; $i {
for ($j=0; $j {
if ($str[$i] == $encrypt_key[$j])
{
$enstr .= $decrypt_key[$j];
休憩;
}
}
}
return $enstr;
}


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

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

for ($i=0; $i {
for ($j=0; $j {
if ($str[$i] == $decrypt_key[$j])
{
$enstr .= $encrypt_key[$j];
休憩;
}
}
}
return $enstr;
}
// }}}


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

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


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター