一、PHP函数
1.基本函数
- 创建数组:
array(1,2,3)
- 数字或数字字符串检测:
is_numeric
检测变量是否为数字或数字字符串
php
$input = array('2',2,3);
echo is_numeric($input[0]);
// 注意16进制的内容 如何0x12,is_numeric返回false,即不认为其是数字或数字字符
// 结果:1
-
生成随机数:
echo rand(1,5);
表示生成1-5范围内一个随机的数字 -
脚本睡眠:
sleep(2)
表示当前脚本睡眠2秒 -
检查变量是否已设置并且不为NULL:
echo isset($input);
-
输出一条结束消息同时退出脚本:
die('end...000');
-
md5加解密:
$name = md5('QNKCDZO');
php// 特殊情况:md5相等,但两值不相等的情况 //解释:md5相等不是真的相等而是,例如下面240610708被md5加密,开头字符0e代表科学计算法,如果用==去比较,==将会进行自动类型转换,将其转换为0*10的462097431906509019562988736854次方=0 QNKCDZO 240610708 = 0e462097431906509019562988736854 s878926199a s155964671a s214587387a
-
函数特点:当传输参数不符那个函数的返回值就会为NULL
2.正则函数
-
正则匹配函数:
preg_match(pattern,content,result)
pattern表示匹配规则,content表示需要进行正则匹配的内容,result是匹配结果(数组)php// 注意点:"/world/i"这个i表示大写WORLD或小写world都会匹配,如果没有i就是精确匹配(比如黑名单里面有select(即服务端会去匹配用户输入是否包含select)我就可以通过SELECT绕过) if (preg_match("/world/i", "Hello World!", $matches)) { echo "找到匹配项!"; print_r($matches); } else { echo "未找到匹配项!"; }
-
过滤和替换:
$out=preg_filter(pattern,content,str)
pattern表示匹配规则,content表示将匹配到的内容的位置替换为何内容,str表示对哪个字符串变量进行正则替换操作,过滤后的内容会赋值给$outphp//下面的例子演示了preg_filter的语法,也展现了,写两遍()避免被过滤达到执行代码的效果 $str='echo getcwd(());'; $pattern = '/\(\)/'; $replacement = ''; echo $str;//echo getcwd(()); echo '*'; $out = preg_filter($pattern, $replacement,$str); echo $out;//echo getcwd(); echo '**'; echo eval($out);//C:\phpstorm\test
3.字符串
-
截取:mb_substr(字符串,开始位置,长度)
php$str = "Hello, World!"; $substr = mb_substr($str, 0, 5); echo $substr; // 输出:Hello
-
字符串位置:mb_strpos(字符串,需要寻找的字符,开始的位置)
php$str = "Hello, Hello, World!"; $position = mb_strpos($str, "Hwello", 7); echo $position; // 输出:13 找不到返回false
-
strpos():查找字符串在另一字符串中第一次出现的位置(区分大小写,汉字占两个位置)
php//安全问题 //解释:下面的内容heo在hello第一次出现的位置是0,就会导致0==false <?php $str1 = "hello"; $str2 = "heo"; if(strpos($str1,$str2)==false) { echo "flag"; } ?>
-
-
替换:
str_replace(需要替换的内容,替换为的内容,字符串)
(区分大小写)php//安全问题:可以通过双写或者大小写进行绕过如下例子 $str = "Hello, worworldld!"; //$str = "hello, WORLD"; 因为区分大小写,这个WORLD并不会被替换 $newStr = str_replace("world", "", $str); echo $newStr; // 输出:Hello, world!
4.过滤函数
-
html过滤
解释:
htmlspecialchars($url)
本质上是为了安全,其能将以下字符进行转码(单引号不会被转码),避免xss的发生,但是htmlspecialchars不是绝对安全,还要取决与上下代码环境,如下面例子- & (和号)成为 &
- " (双引号)成为 "
- < (小于)成为 <
- > (大于)成为 >
php// 下面点击Link将弹出XSS $url = 'javascript:alert("XSS")'; echo '<a href="' . htmlspecialchars($url) . '">Link</a>';
-
HTML、XML 以及 PHP 的标签过滤
解释:
strip_tags(字符串,要保留的内容)
剥去字符串中的 HTML、XML 以及 PHP 的标签,第二个参数是过滤时,不删除某标签,如下例所示php$str = "<p>This is a <a href='https://example.com'>link</a> to a website.</p>"; $clean_str = strip_tags($str,'<p>'); echo $clean_str;//结果:<p>This is a link to a website.</p>
-
在预定义的字符前添加反斜杠
解释:其会在
\ " '
前面加入反斜杠,避免通过引号闭合,造成问题php$str = "It's a beautiful day!"; $escapedStr = addslashes($str); echo $escapedStr;//It\'s a beautiful day! //在上述示例中,原始字符串是 "It's a beautiful day!"。调用 addslashes 函数后,单引号被转义为 \',从而避免将其解释为字符串的结束标记
5.文件有关函数
-
include:使用 include,你可以将包含其他 PHP 文件的代码插入到主文件中,从而在执行期间将这些文件和主文件合并为一个整体(多次引用会多次执行)
a文件
php<?php $flag=123; ?>
b文件
php<?php include 'a.php'; echo $flag;//123 ?>
-
require:require 函数与 include 关键字类似,也用于将外部文件包含到当前文件中。但与 include 不同的是,当被包含的文件不存在或路径不正确时,require 会生成一个致命错误,并终止脚本的执行(多次引用也只会引用一次)
-
highlight_file:让代码高亮显示,highlight_file(要显示的文件,返回值)
php<?php $filename = "myfile.php"; $highlightedCode = highlight_file($filename, true); echo $highlightedCode; ?>
-
file_get_contents:把整个文件读入一个字符串中
php$filename = "a.txt"; $content = file_get_contents($filename); echo $content;// a.txt的内容
-
file:把整个文件读入一个数组,数组中的每个单元都是文件中相应的一行
php$filename = "a.txt"; $content = file($filename); echo $content; print_r($content);