几个简单又实用的PHP函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
/* * *************************
* 生成随机字符串,可以自己扩展 //若想唯一,只需在开头加上用户id
* $type可以为:upper(只生成大写字母),lower(只生成小写字母),number(只生成数字)
* $len为长度,定义字符串长度
* mark 2017/8/15
* ************************** */
function
_random(
$type
,
$len
= 0) {
$new
=
''
;
$string
=
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
;
//数据池
if
(
$type
==
'upper'
) {
for
(
$i
= 0;
$i
<
$len
;
$i
++) {
$new
.=
$string
[mt_rand(36, 61)];
}
return
$new
;
}
if
(
$type
==
'lower'
) {
for
(
$i
= 0;
$i
<
$len
;
$i
++) {
$new
.=
$string
[mt_rand(10, 35)];
}
return
$new
;
}
if
(
$type
==
'number'
) {
for
(
$i
= 0;
$i
<
$len
;
$i
++) {
$new
.=
$string
[mt_rand(0, 9)];
}
return
$new
;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
//计算该月有几天
function
getdaysInmonth(
$month
,
$year
) {
$days
=
''
;
if
(
$month
== 1 ||
$month
== 3 ||
$month
== 5 ||
$month
== 7 ||
$month
== 8 ||
$month
== 10 ||
$month
== 12)
$days
= 31;
else
if
(
$month
== 4 ||
$month
== 6 ||
$month
== 9 ||
$month
== 11)
$days
= 30;
else
if
(
$month
== 2) {
if
(isLeapyear(
$year
)) {
$days
= 29;
}
else
{
$days
= 28;
}
}
return
(
$days
);
}
//判断是否为润年
function
isLeapyear(
$year
) {
if
(((
$year
% 4) == 0) && ((
$year
% 100) != 0) || ((
$year
% 400) == 0)) {
return
(true);
}
else
{
return
(false);
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
//生成订单15位
function
auto_order(
$ord
= 0) {
//自动生成订单号 传入参数为0 或者1 0为本地 1为线上订单
if
(
$ord
== 0) {
$str
=
'00'
. time() . rand(1000, 9999);
//00 本地订单
}
else
{
$str
=
'99'
. time() . rand(1000, 9999);
//11 线上订单
}
return
$str
;
}
//生成订单15位
function
auto_new_order(
$ord
= 0) {
srand(time());
//自动生成订单号 传入参数为0 或者1 0为本地 1为线上订单
if
(
$ord
== 0) {
$str
=
'00'
. time() . mt_rand(100000,999999);
//00 本地订单
}
else
{
$str
=
'11'
. time() . mt_rand(100000,999999);
//11 线上订单
}
return
$str
;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/**
* 检测是否为UTF8编码
* @param $string 检测字符串
* @return bool
*/
function
is_utf8(
$string
) {
return
preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs',
$string
);
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
//处理json字符中的特殊字符
function
getJsonToArr(
$result
,
$return_array
=true)
{
$tempArr
= NULL;
$result
= preg_replace(
'/([^\\\])(":)(\d{9,})(,")/i'
,
'${1}${2}"${3}"${4}'
,
$result
);
//taobao bug,number >2^32
$tempArr
= json_decode(
$result
,
$return_array
);
if
(
$tempArr
== NULL) {
$patterns
=
array
(
'/,+\s*\}/'
,
'/,+\s*\]/'
,
'/"\s+|\s+"/'
,
'/\n|\r|\t/'
,
'/\\\/'
,
'/ss+/'
);
$replacements
=
array
(
'}'
,
']'
,
'"'
,
' '
,
''
,
' '
);
$result
= preg_replace(
$patterns
,
$replacements
,
$result
);
$tempArr
= json_decode(
$result
,
$return_array
);
}
return
$tempArr
;
}
//非法字符过滤函数
function
has_unsafeword(
$str
) {
$regex
=
"/\/|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\+|\{|\}|\:|\<|\>|\?|\[|\]|\.|\/|\;|\'|\`|\=|\\\|\|/"
;
return
preg_replace(
$regex
,
""
,
$str
);
}
//去空格,以及字符添加斜杠
function
_trim(&
$value
) {
Return
addslashes
(trim(
$value
));
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
/**
* 将多维数组转为一维数组
* @param array $arr
* @return array
*/
function
ArrMd2Ud(
$arr
) {
#将数值第一元素作为容器,作地址赋值。
$ar_room
= &
$arr
[key(
$arr
)];
#第一容器不是数组进去转呀
if
(!
is_array
(
$ar_room
)) {
#转为成数组
$ar_room
=
array
(
$ar_room
);
}
#指针下移
next(
$arr
);
#遍历
while
(list(
$k
,
$v
) = each(
$arr
)) {
#是数组就递归深挖,不是就转成数组
$v
=
is_array
(
$v
) ? call_user_func(
__FUNCTION__
,
$v
) :
array
(
$v
);
#递归合并
$ar_room
=
array_merge_recursive
(
$ar_room
,
$v
);
#释放当前下标的数组元素
unset(
$arr
[
$k
]);
}
return
$ar_room
;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
/**
* 判断是PC端还是wap端访问
* @return type判断手机移动设备访问
*/
function
isMobile()
{
// 如果有HTTP_X_WAP_PROFILE则一定是移动设备
if
(isset (
$_SERVER
[
'HTTP_X_WAP_PROFILE'
]))
{
return
true;
}
// 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
if
(isset (
$_SERVER
[
'HTTP_VIA'
]))
{
// 找不到为flase,否则为true
return
stristr
(
$_SERVER
[
'HTTP_VIA'
],
"wap"
) ? true : false;
}
// 脑残法,判断手机发送的客户端标志,兼容性有待提高
if
(isset (
$_SERVER
[
'HTTP_USER_AGENT'
]))
{
$clientkeywords
=
array
(
'nokia'
,
'sony'
,
'ericsson'
,
'mot'
,
'samsung'
,
'htc'
,
'sgh'
,
'lg'
,
'sharp'
,
'sie-'
,
'philips'
,
'panasonic'
,
'alcatel'
,
'lenovo'
,
'iphone'
,
'ipod'
,
'blackberry'
,
'meizu'
,
'android'
,
'netfront'
,
'symbian'
,
'ucweb'
,
'windowsce'
,
'palm'
,
'operamini'
,
'operamobi'
,
'openwave'
,
'nexusone'
,
'cldc'
,
'midp'
,
'wap'
,
'mobile'
);
// 从HTTP_USER_AGENT中查找手机浏览器的关键字
if
(preg_match(
"/("
. implode(
'|'
,
$clientkeywords
) .
")/i"
,
strtolower
(
$_SERVER
[
'HTTP_USER_AGENT'
])))
{
return
true;
}
}
// 协议法,因为有可能不准确,放到最后判断
if
(isset (
$_SERVER
[
'HTTP_ACCEPT'
]))
{
// 如果只支持wml并且不支持html那一定是移动设备
// 如果支持wml和html但是wml在html之前则是移动设备
if
((
strpos
(
$_SERVER
[
'HTTP_ACCEPT'
],
'vnd.wap.wml'
) !== false) && (
strpos
(
$_SERVER
[
'HTTP_ACCEPT'
],
'text/html'
) === false || (
strpos
(
$_SERVER
[
'HTTP_ACCEPT'
],
'vnd.wap.wml'
) <
strpos
(
$_SERVER
[
'HTTP_ACCEPT'
],
'text/html'
))))
{
return
true;
}
}
return
false;
}
//判断是否为安卓手机
public
function
isAndroid()
{
if
(isset(
$_SERVER
[
'HTTP_USER_AGENT'
])){
$agent
=
strtolower
(
$_SERVER
[
'HTTP_USER_AGENT'
]);
if
(
strpos
(
$agent
,
'android'
) !== false)
return
true;
}
return
false;
}
//判断是否为iphone或者ipad
public
function
isIos()
{
if
(isset(
$_SERVER
[
'HTTP_USER_AGENT'
])){
$agent
=
strtolower
(
$_SERVER
[
'HTTP_USER_AGENT'
]);
if
(
strpos
(
$agent
,
'iphone'
)||
strpos
(
$agent
,
'ipad'
))
return
true;
}
return
false;
}
//判断是否为微信内置浏览器打开
public
function
isWechet()
{
if
(isset(
$_SERVER
[
'HTTP_USER_AGENT'
]) &&
strpos
(
$_SERVER
[
'HTTP_USER_AGENT'
],
'MicroMessenger'
) !== false){
return
true;
}
return
false;
}
//整合到一起,判断当前设备,1:安卓;2:IOS;3:微信;0:未知
public
function
isDevice()
{
if
(
$_SERVER
[
'HTTP_USER_AGENT'
]){
$agent
=
strtolower
(
$_SERVER
[
'HTTP_USER_AGENT'
]);
if
(
strpos
(
$agent
,
'micromessenger'
) !== false)
return
3;
elseif
(
strpos
(
$agent
,
'iphone'
)||
strpos
(
$agent
,
'ipad'
))
return
2;
else
return
1;
}
return
0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
/**
* 日期转换成几分钟前
*/
public
function
formatTime(
$date
) {
$timer
=
strtotime
(
$date
);
$diff
=
$_SERVER
[
'REQUEST_TIME'
] -
$timer
;
$day
=
floor
(
$diff
/ 86400);
$free
=
$diff
% 86400;
if
(
$day
> 0) {
if
(15 <
$day
&&
$day
<30){
return
"半个月前"
;
}
elseif
(30 <=
$day
&&
$day
<90){
return
"1个月前"
;
}
elseif
(90 <=
$day
&&
$day
<187){
return
"3个月前"
;
}
elseif
(187 <=
$day
&&
$day
<365){
return
"半年前"
;
}
elseif
(365 <=
$day
){
return
"1年前"
;
}
else
{
return
$day
.
"天前"
;
}
}
else
{
if
(
$free
>0){
$hour
=
floor
(
$free
/ 3600);
$free
=
$free
% 3600;
if
(
$hour
>0){
return
$hour
.
"小时前"
;
}
else
{
if
(
$free
>0){
$min
=
floor
(
$free
/ 60);
$free
=
$free
% 60;
if
(
$min
>0){
return
$min
.
"分钟前"
;
}
else
{
if
(
$free
>0){
return
$free
.
"秒前"
;
}
else
{
return
'刚刚'
;
}
}
}
else
{
return
'刚刚'
;
}
}
}
else
{
return
'刚刚'
;
}
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
/**
* 截取长度
*/
public
function
getSubString(
$rawString
,
$length
=
'100'
,
$etc
=
'...'
,
$isStripTag
=true){
$rawString
=
str_replace
(
'_baidu_page_break_tag_'
,
''
,
$rawString
);
$result
=
''
;
if
(
$isStripTag
)
$string
= html_entity_decode(trim(
strip_tags
(
$rawString
)), ENT_QUOTES,
'UTF-8'
);
else
$string
= trim(
$rawString
);
$strlen
=
strlen
(
$string
);
for
(
$i
= 0; ((
$i
<
$strlen
) && (
$length
> 0));
$i
++){
if
(
$number
=
strpos
(
str_pad
(
decbin
(ord(
substr
(
$string
,
$i
, 1))), 8,
'0'
, STR_PAD_LEFT),
'0'
))
{
if
(
$length
< 1.0){
break
;
}
$result
.=
substr
(
$string
,
$i
,
$number
);
$length
-= 1.0;
$i
+=
$number
- 1;
}
else
{
$result
.=
substr
(
$string
,
$i
, 1);
$length
-= 0.5;
}
}
if
(
$isStripTag
)
$result
= htmlspecialchars(
$result
, ENT_QUOTES,
'UTF-8'
);
if
(
$i
<
$strlen
){
$result
.=
$etc
;
}
return
$result
;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
/**
* utf-8和gb2312自动转化
* @param unknown $string
* @param string $outEncoding
* @return unknown|string
*/
function
safeEncoding(
$string
,
$outEncoding
=
'UTF-8'
)
{
$encoding
=
"UTF-8"
;
for
(
$i
= 0;
$i
<
strlen
(
$string
);
$i
++) {
if
(ord (
$string
{
$i
} ) < 128)
continue
;
if
((ord (
$string
{
$i
} ) & 224) == 224) {
// 第一个字节判断通过
$char
=
$string
{++
$i
};
if
((ord (
$char
) & 128) == 128) {
// 第二个字节判断通过
$char
=
$string
{++
$i
};
if
((ord (
$char
) & 128) == 128) {
$encoding
=
"UTF-8"
;
break
;
}
}
}
if
((ord (
$string
{
$i
} ) & 192) == 192) {
// 第一个字节判断通过
$char
=
$string
{++
$i
};
if
((ord (
$char
) & 128) == 128) {
// 第二个字节判断通过
$encoding
=
"GB2312"
;
break
;
}
}
}
if
(
strtoupper
(
$encoding
) ==
strtoupper
(
$outEncoding
))
return
$string
;
else
return
@iconv (
$encoding
,
$outEncoding
,
$string
);
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/**
*对内容中的关键词添加链接
*只处理第一次出现的关键词,对已有链接的关键不会再加链接,支持中英文
*$content:string 原字符串
*$keyword:string 关键词
*$link:string,链接
*/
function
yang_keyword_link(
$content
,
$keyword
,
$link
){
//排除图片中的关键词
$content
= preg_replace(
'|(<img[^>]*?)('
.
$keyword
.
')([^>]*?>)|U'
,
'$1%&&&&&%$3'
,
$content
);
$regEx
=
'/(?!((<.*?)|(<a.*?)))('
.
$keyword
.
')(?!(([^<>]*?)>)|([^>]*?<\/a>))/si'
;
$url
=
'<a href="'
.
$link
.
'" target="_blank" class="content_guanjianci">'
.
$keyword
.
'</a>'
;
$content
= preg_replace(
$regEx
,
$url
,
$content
,1);
//还原图片中的关键词
$content
=
str_replace
(
'%&&&&&%'
,
$keyword
,
$content
);
return
$content
;
}
|