邢栋博客

邢栋博客,Action博客,记录工作和生活中的点点滴滴

php截取字符串函数(兼容中文或中英文字符串)
function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) {
        if(function_exists("mb_substr"))
            $slice = mb_substr($str, $start, $length, $charset);
        elseif(function_exists('iconv_substr')) {
            $slice = iconv_substr($str,$start,$length,$charset);
        }else{
            $re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
            $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
            $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
            $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
            preg_match_all($re[$charset], $str, $match);
            $slice = join("",array_slice($match[0], $start, $length));
        }
        return $suffix ? $slice.'...' : $slice;
    }
php加密解密(异或,base64,des)

前几天给pc端写接口用到数据加密,现在总结下,当时主要做的是对pc端传来的数据进行解密,现在用php模拟下加密以及解密

1.加密

第一步:先进行异或加密,然后在base64加密

function my_jiami($str){  

    //随机取8位数 

        for($i=0;$i<8;$i++){
            $key.= rand(0,9);
        }
       $tmp="";
       for($i=0;$i<strlen($str);$i++){
        $tmp.=substr($str,$i,1) ^ substr($key,$i%8,1);
       }
       return base64_encode($key.$tmp);  //异或后进行base64
      }  

第二步: 进行des加密 //$str 为第一步加密后的字符串

        $key = md5('www.xingdong365.com');

        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);  
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
        echo "第二步des加密后:".$str = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_ECB, $iv);
第三步:base64在加密$str 为第二步加密后的字符串
        echo "第三步base64加密后:".$str =base64_encode($str); 

2.解密

第一步:base64解密

        echo "第一步 base64解密:".$str= base64_decode($str);
        echo "<br>";

第二步:des解密

        $key = md5('www.xingdong365.com');

        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);  
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
        echo "第二步 desc解密:".$str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key,$str,MCRYPT_MODE_ECB,$iv);
        echo "<br>";
第三步:异或

       $len=strlen($str);
       $str=base64_decode($str);
       $key = substr($str,0,8);
       $str=substr($str,8,$len-8);
       $tmp="";
       for($i=0;$i<strlen($str);$i++){
        $tmp.=substr($str,$i,1) ^ substr($key,$i%8,1);
       }   
        echo $tmp;//为解密后的数据


//归纳函数

<?php
header("Content-type:text/html;charset=utf-8");
function my_jiami($str){
//异或 
$key1=""; 
        for($i=0;$i<8;$i++){
            $key1.= rand(0,9);
        }
        $tmp="";
        for($i=0;$i<strlen($str);$i++){
        $tmp.=substr($str,$i,1) ^ substr($key1,$i%8,1);
        }
        $str =  base64_encode($key1.$tmp);//异或后进行base64加密
        //des加密
        $key2 = md5('www.xingdong365.com');
        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);  
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);  
        $str = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key2, $str, MCRYPT_MODE_ECB, $iv);
        //base64加密
        return $str =base64_encode($str); 

    }  

    $jiami = my_jiami('flycoder');

    function my_jiemi($str){
    //base64解密
    $str= base64_decode($str);
    //des解密
    $key1 = md5('www.xingdong365.com');
        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);  
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
        $str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key1,$str,MCRYPT_MODE_ECB,$iv);
        //base64解密后异或
        $len=strlen($str);
        $str=base64_decode($str);
        $key2 = substr($str,0,8);
        $str=substr($str,8,$len-8);
        $tmp="";
        for($i=0;$i<strlen($str);$i++){
        $tmp.=substr($str,$i,1) ^ substr($key2,$i%8,1);
        }

       return $tmp;    
    }

    echo my_jiemi($jiami);

?>

php获取本周,上周,本月,上月,本季度日期代码
 $startweek = "本周开始时间:".date("Y-m-d H:i:s",mktime(0,0,0,date("m"),date("d")-date("w")+1-7,date("Y")));
        $endweek = "本周结束时间:".date("Y-m-d H:i:s",mktime(23,59,59,date("m"),date("d")-date("w")+7-7,date("Y")));
        echo $startweek;
        echo "<br>";
        echo $endweek;
        echo "<br>";

        $startmonth = "本月开始时间:".date("Y-m-d H:i:s",mktime(0,0,0,date("m"),1,date("Y")));
        $endmonth = "本月结束时间:".date("Y-m-d H:i:s",mktime(23,59,59,date("m"),date("t"),date("Y")));
        echo $startmonth;
        echo "<br>";
        echo $endmonth;
        echo "<br>";

        $startlastmonth = "上月开始时间:".date("Y-m-d H:i:s",mktime(0,0,0,date("m")-1,1,date("Y")));
        $endlastmonth = "上月结束时间:".date("Y-m-d H:i:s",mktime(23,59,59,date("m"),0,date("Y")));
        echo $startlastmonth;
        echo "<br>";
        echo $endlastmonth;
        echo "<br>";
        $starttime = "最近七天:".date("Y-m-d H:i:s",mktime(0,0,0,date("m"),date("d")-7,date("Y")));
        $endtime = "最近30天:".date("Y-m-d H:i:s",mktime(0,0,0,date("m"),date("d")-30,date("Y")));
        echo $starttime;
        echo "<br>";
        echo $endtime;
        echo "<br>";
        $quarter = ceil((date('n'))/3);//当月是第几季度
        //echo '本季度:<br>';
        echo "本季度开始时间:".date('Y-m-d H:i:s', mktime(0, 0, 0,$quarter*3-3+1,1,date('Y'))),"<br>";
        echo "本季度结束时间:".date('Y-m-d H:i:s', mktime(23,59,59,$quarter*3,date('t',mktime(0,0,0,$quarter*3,1,date("Y"))),date('Y'))),"<br>";
php常用的字符串处理函数

1、 查找字符位置函数

strpos($str,search,[int]):查找search$str中的第一次位置从int开始;

stripos($str,search,[int]):函数返回字符串在另一个字符串中第一次出现的位置。该函数对大小写不敏感

strrpos($str,search,[int]):查找search$str中的最后一次出现的位置从int

2、提取子字符函数

substr($str,int start[,int length]):$strstrat位置开始提取[length长度的字符串]

strstr($str1,$str2):$str1(第一个的位置)搜索$str2并从它开始截取到结束字符串;若没有则返回FALSE

strrchr() 从最后一次搜索到的字符处返回;用处:取路径中文件名

3、替换字符串的PHP字符串函数

str_replace(search,replace,$str):$str中查找searchreplace来替换

strtr($str,search,replace):这个函数中replace不能为"";

substr_replace($Str,$rep,$start[,length])$str原始字符串,$rep开始后替换为空

4、字符长度

int strlen($str)

5、分割成数组的PHP字符串函数

str_split($str,len):$strlen长度进行分割返回数组

expload(search,$str[,int])

6、去除空格:

ltrimrtrimtrim

7HTML代码有关函数

nl2br():使转换为&lt;br>

strip_tags($str[,¹<p>¹]):去除HTMLPHP标记

$str中所有HTMLPHP代码将被去除,可选参数为htmlPHP代码作用是将保留

可选参数所写的代码。

如:echo strip_tags($text, ¹<br><p>¹);

htmlspecialchars($str[,参数]):页面正常输出HTML代码参数是转换方式

8、字符大小写转换的PHP字符串函数

strtolower($str) 字符串转换为小写

strtoupper($str) 字符串转换为大写

ucfirst($str) 将函数的第一个字符转换为大写

ucwords($str) 将每个单词的首字母转换为大写

9、数据库相关的PHP字符串函数

addslashes($str):使str内单引号(¹)、双引号(")、反斜线()与 NUL字符串转换为¹,",\

magic_quotes_gpc = On 自动对 get post cookie的内容进行转义

get_magic_quotes_gpc()检测是否打开magic_quotes_gpc

stripslashes() 去除字符串中的反斜杠

php数组关于键名和键值的常用函数
$array=array("Linux","Apache","MySQL","PHP");

print_r(array_keys($array)); //返回所有键名
//Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 )
print_r(array_keys($array,"PHP"));       //返回值为PHP的键名
//Array ( [0] => 3 )

print_r(array_values($array)); //返回所有键值
//Array ( [0] => Linux [1] => Apache [2] => MySQL [3] => PHP )

print_r(array_reverse($input));       //将数组颠倒,不保留键名
//Array ( [0] => PHP [1] => MySQL [2] => Apache [3] => Linux )

print_r(array_reverse($input,true));    //将数组颠倒,保留键名
//Array ( [3] => PHP [2] => MySQL [1] => Apache [0] => Linux )
php数组与数据结构的函数,堆栈,队列,求和

1.使用数组实现堆栈 //后进后出

array_push() array_pop()

//使用数组实现堆栈

$b=array(1,2,3,4);

$b[]="a";//入栈

array_push($b,"b","c");//使用函数入栈,从最后的位置插入

print_r($b);//Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => a [5] => b [6] => c )

$value=array_pop($b);//使用函数出栈

print_r($b);//Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => a [5] => b )

echo $value;//显示出栈的元素的值 c

2.使用数组实现队列 //先进先出

array_unshift() array_shift()

//使用数组实现队列

$c=array(1,2,3);

print_r($c);//Array ( [0] => 1 [1] => 2 [2] => 3 );

array_unshift($c,"abc","bcd");//入队,从开始的位置插入

print_r($c);//Array ( [0] => abc [1] => bcd [2] => 1 [3] => 2 [4] => 3 )

$values=array_shift($c);//出队

print_r($c);// Array ( [0] => bcd [1] => 1 [2] => 2 [3] => 3 )

unset($c[2]);//删除指定位置元素

print_r($c);//Array ( [0] => bcd [1] => 1 [3] => 3 )

//array_rand()  随机返回数组下标

$arr=array(1,3,4,5,76,7,99,6,2,3);

echo array_rand($arr);//返回的是随机的数组元素的下标

echo $arr[array_rand($arr)];//随机显示数组元素的值

//shuffle()  随机重新排列数组

$arr2=array(32,35,33);

shuffle($arr2);

print_r($arr2);//数组元素位置随机变换

//array_sum()  求和

$arr3=array(1,3,5);

echo array_sum($arr3); //返回9

print_r($arr3);//Array ( [0] => 1 [1] => 3 [2] => 5 )

//range(最小值,最大值,步长)

$arr4=range(0,100,10);

print_r($arr4);//Array ( [0] => 0 [1] => 10 [2] => 20 [3] => 30 [4] => 40 [5] => 50 [6] => 60 [7] => 70 [8] => 80 [9] => 90 [10] => 100 )

php 拆分、合并、分解、结合的数组函数

1.array_slice()//从数组中取出一段

$data=array("Linux","Apache","MySQL","PHP");

$data = array_slice($data,2); //取出数组中的前两个

print_r($data); //Array ( [0] => MySQL [1] => PHP )

$data = array_slice($data,1,2); ////取下标为12的元素

print_r($data); //Array ( [0] => Apache [1] => MySQL )

$data = array_slice($data,1,2,true); //取下标为12的元素 保留之前的键

print_r($data); //Array ( [1] => Apache [2] => MySQL ) 

2.array_splice()//把数组中的一部分去掉并用其它值取代

$input = array("red", "green", "blue", "yellow");

array_splice($input, 2);

// $input is now array("red", "green")

$input = array("red", "green", "blue", "yellow");

array_splice($input, 1, -1);

// $input is now array("red", "yellow")

$input = array("red", "green", "blue", "yellow");

array_splice($input, 1, count($input), "orange");

// $input is now array("red", "orange")

$input = array("red", "green", "blue", "yellow");

array_splice($input, -1, 1, array("black", "maroon"));

// $input is now array("red", "green","blue", "black", "maroon")

$input = array("red", "green", "blue", "yellow");

array_splice($input, 3, 0, "purple");

// $input is now array("red", "green","blue", "purple", "yellow");

3.array_combine()//创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值

$a1=array("OS","WebServer","DataBase","Language");

$a2=array("Linux","Apache","MySQL","PHP");

print_r(array_combine($a1,$a2));//第一个参数作为键名,第二个作为值来合并

//Array ( [OS] => Linux [WebServer] => Apache [DataBase] => MySQL [Language] => PHP )

4.array_merge();//合并一个或多个数组

$a3=array("OS","WebServer","DataBase","Language");

$a4=array("Linux","Apache","MySQL","PHP");

$a5=$a3+$a4;

print_r($a5);//因为两个数组下标重复所以显示这样

//Array ( [0] => OS [1] => WebServer [2] => DataBase [3] => Language )

print_r(array_merge($a3,$a4));//合并并重新索引

//Array ( [0] => OS [1] => WebServer [2] => DataBase [3] => Language [4] => Linux [5] => Apache [6] => MySQL [7] => PHP )

5.array_intersect();//计算数组的交集

$a7=array("OS","WebServer","DataBase","Language",1,2,3);

$a8=array("Linux","Apache","MySQL","PHP",2,3,4);

print_r(array_intersect($a7,$a8));//Array ( [5] => 2 [6] => 3 )

6.array_diff();//计算数组的差集

$a9=array(1,2,3,4);

$a10=array(3,4,5,6);

print_r(array_diff($a9,$a10));//Array ( [0] => 1 [1] => 2 )

//返回第一个数组跟第二个相差的元素

php常用的排序函数

数组的排序函数

1. 简单的数组排序sort() rsort()

$data=array(5,8,1,7,2);
sort($data);//元素由小到大进行排序
print_r($data);//Array ( [0] => 1 [1] => 2 [2] => 5 [3] => 7 [4] => 8 )
rsort($data);//元素由大到小进行排序
print_r($data);//Array ( [0] => 8 [1] => 7 [2] => 5 [3] => 2 [4] => 1 ) 

2. 根据键名对数组排序 ksort() krsort()

$data=array(5=>"five",8=>"eight",1=>"one",7=>"seven",2=>"two");
ksort($data);//对数组的下标进行由小到大排序
print_r($data);//Array ( [1] => one [2] => two [5] => five [7] => seven [8] => eight )
krsort($data);//对数组的下标进行由大到小排序
print_r($data);//Array ( [8] => eight [7] => seven [5] => five [2] => two [1] => one  

3. 根据元素的值对数组排序asort() arsort()

//根据元素的值对数组排序
$data=array("1"=>"Linux","a"=>"Apache","m"=>"MySQL","l"=>"PHP");
//asort() arsort  与 sort() rsort()的区别在于 前者排序后保持原有的键名,后者不保持原有键名,且键名从0开始
asort($data);
print_r($data);//Array ( [a] => Apache [1] => Linux [m] => MySQL [l] => PHP )
arsort($data);
print_r($data);//Array ( [l] => PHP [m] => MySQL [1] => Linux [a] => Apache )
sort($data);
print_r($data);//Array ( [0] => Apache [1] => Linux [2] => MySQL [3] => PHP )
rsort($data);
print_r($data);//Array ( [0] => PHP [1] => MySQL [2] => Linux [3] => Apache )

4.根据"自然数排序法对数组排序natsort()//区分大小写字母比较 natcasescort()//不区分大小写字母的比较

//根据”自然数排序法“对数组排序(0-9短者优先)

$data=array("file.txt","file11.txt","file2.txt","file22.txt");

sort($data);

print_r($data);//Array ( [0] => file.txt [1] => file11.txt [2] => file2.txt [3] => file22.txt )

natsort($data);

print_r($data);//Array ( [0] => file.txt [2] => file2.txt [1] => file11.txt [3] => file22.txt )

natcasesort($data);

print_r($data);//Array ( [0] => file.txt [2] => file2.txt [1] => file11.txt [3] => file22.txt )

 

5.根据用户自定义规则对数组排序 usort() uasort() uksort()对键排序
//用户自定义排序函数

$data=array("Linux","Apache","MySQL","PHP");

usort($data,"sortbylen");//通过元素长度排序

print_r($data);//Array ( [0] => PHP [1] => MySQL [2] => Linux [3] => Apache )

function sortbylen($one,$two){

if(strlen($one)==strlen($two))

 return 0;

  else

   return (strlen($one)>strlen($two))?1:-1;

}


6.多维数组的排序   array_multisort()

 


优惠券
广告位-淘宝
最新微语