php题库记录
12482022-04-06 17:47:00返回列表
php题库记录
一、写一个函数来检查用户提交的数据是否为整数(不区分数据类型,可以为二进制、八进制、十进制、十六进制数字)
<?php
$a=2;
//strpos()函数查找字符串在另一个字符串中第一次出现的位置 区分大小写 返回值:返回字符串在另一个字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE, 字符串位置从0开始,不是1开始
//strrpos()函数查找字符串在另一个字符串中最后一次出现的位置 区分大小写
//stripos()函数查找字符串在另一个字符串中第一次出现的位置 不区分大小写
//strripos()函数查找字符串在另一个字符串中最后一次出现的位置 不区分大小写
if(!is_numeric($a) || strpos($a,'.')!==false){
echo '不是整数';
}else{
echo '是整数';
}
二、PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码,请写两个替代的函数实现兼容Unicode文字的字符串大小写转换
解决方案:用str_split(string string,intstring,intsplit_length = 1)按每个字节切割,像中文能切割成三个字节。对识别到的字节若是英文字母则进行转换。
<?php
function mystrtoupper($a){
$q =str_split($a,1); //str_split() 函数把字符串分割到数组中。如果 length 小于 1,则 str_split() 函数将返回 FALSE。如果 length 大于字符串的长度,则整个字符串将作为数组的唯一元素返回。
$r = '';
foreach($q as $v){
$v = ord($v); //ord() 函数返回字符串中第一个字符的 ASCII 值。
if($v >= 97 && $v <= 122){
//1,控制字符 0-31和127
//2,可显示字符 32-126
// (1)48~57为0到9十个阿拉伯数字;
// (2)65~90为26个大写英文字母;
// (3)97~122号为26个小写英文字母;
// (4)其它标点符号、运算符号等;
$v -= 32;
}
$r .= chr($v); //chr() 函数从指定的 ASCII 值返回字符。ASCII 值可被指定为十进制值、八进制值或十六进制值。八进制值被定义为带前置 0,而十六进制值被定义为带前置 0x。
}
return $r;
}
$a='sdss@大家继续学习sfs23@##$%$^%$^%112aa';
echo "原始:".$a."\n";
echo "转换:";
$b = mystrtoupper($a);
echo $b;
三、说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?
按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处
四、WEB开发中数据提交方式有几种?有什么区别?
Get与post两种方式
GET和POST区别:
1、参数传递方式:GET通过URL传递,POST放在Request body中。
2、参数缓存策略:GET请求会被浏览器主动cache,而POST不会,除非手动设置。GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
3、参数转码:Get 请求中有非 ASCII 字符,会在请求之前进行转码,POST不用,因为POST在Request body中,通过 MIME,也就可以传输非 ASCII 字符。
4、 一般浏览器输入网址访问网站都是GET请求,GET从服务器获取数据,POST向服务器传送数据。
5、参数大小限制:HTTP的底层是TCP/IP。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。GET/POST都是TCP链接。GET和POST能做的事情是一样的。但是请求的数据量太大对浏览器和服务器都是很大负担。所以业界有了不成文规定,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。GET请求在URL中传送的参数是有长度限制的,而POST没有。GET传值一般在2KB以内,POST传值大小可以在php.ini中进行设置。
6、请求过程:GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。但并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
7、GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
8、GET在浏览器回退时是无害的,而POST会再次提交请求。