学习笔记

Study notes

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会再次提交请求。






返回
顶部