eregiphp
1. 我在看php視頻教程防止注入那集時,發現eregi在php5好像不能用了,那我要用什麼代替eregi呢
php正則表達式函數有不少 你可以選擇替換 或者其他的
2. php 正則匹配的內容不包含某個字元
判斷一個字元串中是否含有另一字元串,php有很多方法,如下:
1. 常見函數
strstr($str, "abc");
2. 正則匹配
preg_match("/(abc)/is", $str);
完整代碼示例:
$str = "dfadfadf765577abc55fd";
$pattern_url = "/^((?!abc).)*$/is";
if (preg_match($pattern_url, $str))
{
echo "不含有abc!";
}
else
{
echo "含有abc!";
}
結果為:false,含有abc!
同時匹配,包含字元串 「abc」,而且不包含字元串 「xyz」的正則表達式:
preg_match("/(abc)[^((?!xyz).)*$]/is", $str);
3. php eregi 到php5是不是被淘汰了如果淘汰了用什麼代替呢
eregi 在php5仍然可以使用
我自己不叫喜歡用preg_match(),匹配速度更快
4. PHP Deprecated: Function eregi() is deprecated in
eregi函數在php5.3中屬於「不贊成使用」的函數,這個函數依然可以用,但是會有PHP Deprecated的報錯。
根據你所提供的邏輯來改,把那一行改成
if (strpos($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME']) === FALSE){exit("<br><p align=center><font color='red' style='font-size:12pt'>出錯了,本頁面禁止外部鏈接。</font></p>");}
就可以了。
不過老實說這個判斷有點不太嚴謹。
如果是我,我會這樣寫
if (parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) != $_SERVER['SERVER_NAME'])
{exit("<br><p align=center><font color='red' style='font-
size:12pt'>出錯了,本頁面禁止外部鏈接。</font></p>");}
5. PHP解密Unicode及Escape加密字元串
在json中不支持中文,用它傳送中文數據就會出現數據丟失或者亂碼,必須在傳送前對要發送的字元串進行編碼,由於傳送過去需要用js進行數據解析,考慮
到js中有unescape函數,故若在php中有個escape函數,對數據進行編碼,在客戶端用unescape進行
解碼,這樣就會方便很多。
本文給大家分享一個PHP解密Unicode及Escape加密字元串函數
?
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
?php
function
uni_decode($s)
{
preg_match_all('/#([0-9]{2,5});/',
$s,
$html_uni);
preg_match_all('/[%]u([0-9a-f]{4})/ie',
$s,
$js_uni);
$source
=
array_merge($html_uni[0],
$js_uni[0]);
$js
=
array();
for($i=0;$icount($js_uni[1]);$i++)
{
$js[]
=
hexdec($js_uni[1][$i]);
}
$utf8
=
array_merge($html_uni[1],
$js);
$code
=
$s;
for($j=0;$jcount($utf8);$j++)
{
$code
=
str_replace($source[$j],
unicode2utf8($utf8[$j]),
$code);
}
return
$code;//$s;//preg_replace('/u([0-9a-f]{4})/ie',
chr(hexdec('1')),
$s);
}
function
unicode2utf8($c)
{
$str=;
if
($c
0x80)
{
$str.=chr($c);
}
else
if
($c
0x800)
{
$str.=chr(0xc0
|
$c6);
$str.=chr(0x80
|
$c
0x3f);
}
else
if
($c
0x10000)
{
$str.=chr(0xe0
|
$c12);
$str.=chr(0x80
|
$c6
0x3f);
$str.=chr(0x80
|
$c
0x3f);
}
else
if
($c
0x200000)
{
$str.=chr(0xf0
|
$c18);
$str.=chr(0x80
|
$c12
0x3f);
$str.=chr(0x80
|
$c6
0x3f);
$str.=chr(0x80
|
$c
0x3f);
}
return
$str;
}
$str='%u5927%u5BB6%u597D%uFF0C我是孤魂!br
/';
echo
uni_decode($str);
//
大家好,我是孤魂!這是測試文本!
在網上搜索一把,很多用php實現的escape函數,大同小異
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function
phpescape($str){
preg_match_all(/[x80-xff].|[x01-x7f]+/,$str,$newstr);
$ar
=
$newstr[0];
foreach($ar
as
$k=$v){
if(ord($ar[$k])=127){
$tmpString=bin2hex(iconv(GBK,ucs-2,$v));
if
(!eregi(WIN,PHP_OS)){
$tmpString
=
substr($tmpString,2,2).substr($tmpString,0,2);
}
$reString.=%u.$tmpString;
}
else
{
$reString.=
rawurlencode($v);
}
}
return
$reString;
}
以上所述就是本文的全部內容了,希望大家能夠喜歡。
6. PHP正則表達式替換函數eregi_replace不起作用
在5.3版的以後的php,比如5.4, 5.5,已經廢除了eregi_replace函數
去掉@,用preg_replace替代。