php面试题(1)

1.strlen和mb_strlen 之间的异同点
strlen和mb_strlen都是用于获取字符串长度。
strlen只针对单字节编码字符,也就是说它计算的是字符串的总字节数。如果是多字节编码,如 gbk 和 utf-8,使用 strlen 得到是该字符的总字节数;
可以使用mb_strlen获取其字符个数,使用mb_strlen 要注意两点,一是要开启 mbstring 扩展,二是要指定字符集。

例题:

   <?php
    /*
        strlen( )与 mb_strlen( )的作用分别是什么(新浪网技术部)
    */
    header('Content-Type:text/html;charset=utf-8');
    // (1)英文字符串
    $str1 ="duang~";
    echo strlen($str1);//总字节数为6,内部字符编码,单字节编码
    echo "<br />";
    echo mb_strlen($str1);//总字节数为6,内部字符编码
    echo "<br />";
    echo mb_strlen($str1,'utf-8');//总字节数或字符长度为6,指定字符编码(utf-8),多字节编码
    echo "<hr />";

    // (2)中文字符串
    $str2 = "你是我的小苹果";
    echo strlen($str2);//总字节数为21,内部字符编码,单字节编码
    echo "<br />";
    echo mb_strlen($str2);//总字节数为21,内部字符编码
    echo "<br />";
    echo mb_strlen($str2,'utf-8');//字符长度为7,指定字符编码(utf-8),多字节编码
?>
相关题目 1:实现中文字串截取无乱码的方法。

方法一,使用 php 内置函数 mb_substr()
方法二,自定义函数,以 utf-8 为例,如下:

<?php
    /*
        相关题目 1:实现中文字串截取无乱码的方法。
    */
    header('Content-Type:text/html;charset=utf-8');

    //=================方法一=======================
    $str = "你是我的温暖阳光";
    echo mb_substr($str, 2,4,'utf-8');//输出 我的温暖

    // ================方法二=======================
    /**
     * utf8编码字符串截取无乱码
     * @param $str string 要处理的字符串
     * @param $start int 从哪个位置开始截取
     * @param $length int 要截取字符的个数
     * @return string 截取后得到的字符串
    */
    function substr_utf8($str,$start,$length = null)
    {
        $sep = "";
        $arr = array_slice(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY), $start,$length);
        return join($sep,$arr);
    }
    // 示例
    $str = "你是我的温暖阳光";
    echo substr_utf8($str,2,4);//输出 我的温暖
?>
相关题目2:如何求解字符串“中国2北333京”的字符数(一个中文一个字符),并找到第四个字符“北”。

方法一,使用php内置函数,确保配置中已打开mbstring扩展
方法二,自定义函数实现求其长度,截取使用上面定义的substr_utf8

<?php
    /*
        相关题目 2:如何求解字符串“中国2北333京”的字符数(一个中文一个字符),并找到第四个字符“北”
    */
    header('Content-Type:text/html;charset=utf-8');

    //=================方法一=======================
    $str = "中国2北333京";
    echo mb_strlen($str,'utf-8');//输出字符数 8
    echo mb_substr($str, 3,1,'utf-8');//输出 北

    // ================方法二=======================
    /**
     * utf8编码字符串截取无乱码
     * @param $str string 要处理的字符串
     * @param $start int 从哪个位置开始截取
     * @param $length int 要截取字符的个数
     * @return string 截取后得到的字符串
    */
    function substr_utf8($str,$start,$length = null)
    {
        $sep = "";
        $arr = array_slice(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY), $start,$length);
        return join($sep,$arr);
    }

    /**
     * utf8编码字符串计算长度
     * @param $str string 要处理的字符串
     * @return int 字符串的长度或字符个数
    */  
    function strlen_utf8($str)
    {
        return count(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY));
    }

    // 示例
    $str = "中国2北333京";
    echo strlen_utf8($str);//输出字符数 8
    echo substr_utf8($str,3,1);//输出 北
?>

2.用正则表达式将字符串分割到数组中,用split函数
3.下列全局变量的作用:

$_SERVER['DOCUMENT_ROOT']//当前运行脚本所在的文档根目录
$_SERVER['HTTP_HOST ']//当前请求的 Host: 头部的内容
$_SERVER['REMOTE_ADDR']//正在浏览当前页面用户的 IP 地址
$_SERVER['HTTP_REFERER']//链接到当前页面的前一页面的 URL 地址
$_SERVER['SERVER_NAME']//当前运行脚本所在服务器主机的名称
$_FILES //包含有所有上传的文件信息
S_FILES['userfile']['name']//客户端机器文件的原名称
$_FILES['userfile']['type']//文件 MIME 类型,如果浏览器提供此信息的话,如“image/gif”。
$_FILES['userfile']['size']//已上传文件的大小,单位为字节
$_FILES['userfile']['tmp_name']//文件被上传后在服务端储存的临时文件名
$_FILES['userfile']['error']//和该文件上传相关的错误代码

4.include 和 require 都能把另外一个文件包含到当前文件中,他们有什么区别?Include 和include_once 又有什么区别?

二者区别只有一个,那就是对包含文件的需求程度。include 就是包含,如果被包含的文件不存在的话,那么则会提示一个错误,但是程序会继续执行下去。而 require 意思是需要,如果被包含文件不存在或者无法打开的时候,则会提示错误,并且会终止程序的执行。
这两种结构除了在如何处理失败之外完全一样。
once 的意思是一次,那么 include_once 和 require_once 表示只包含一次,避免重复包含。

5.用最少的代码写一个求 3 值最大值的函数

<?php

    // 定义函数
    function maxnum($a,$b,$c)
    {
        return $a > $b ? ($a > $c ? $a : $c) : ($b > $c ? $b : $c);
    }

    // 调用实例
    echo maxnum(24,15,8);
?>

6.简述 POST 和 GET 传输的最大容量分别是多少?

POST 根据你 php.ini 文件配置(默认是 8M)
GET 的话大小限制在 2KB

相关题目:表单中 get 与 post 提交方法的区别?

get 是发送请求 HTTP 协议通过 url 参数传递进行接收,而 post 是实体数据,可以通过表单提交大量信息。

7.echo(),print(),print_r()的区别?

echo, print是PHP语句print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)
print只能打印出简单类型变量的值(如int,string)
print_r可以打印出复杂类型变量的值(如数组,对象)

echo — 输出一个或者多个字符串
print –输出一个字符串
print_r — 打印关于变量的易于理解的信息。

8.用 PHP 打印出前一天的时间格式是 2006-5-10 22:21:21。

<?php
    /*
        用 PHP 打印出前一天的时间格式是 2006-5-10 22:21:21。
    */
    // ================方法一==================
    echo date("Y-m-d H:i:s",time() - 3600*24);
    echo "<br />";
    // ================方法二==================
    echo date("Y-m-d H:i:s",strtotime("-1 day"));
    echo "<br />";

    // 将表单中提交的时间字符串"2015-6-23"转成时间戳
    $date = strtotime("2015-6-23");
    echo $date;
?>

说明:

使用strtotime可以将任何字符串的时间表示(now,seconds,day,week等)转换成时间戳,仅针对英文。
在实际开发的时候,strtotime非常有用,因为对于表单来说,提交的数据都是字符串。比如,“2013-4-27”需要将其转换成时间戳然后存到数据库中。
相关题目:求两个日期的差数,例如 2009-3-1 ~ 2009-4-4 的日期差数

(strtotime(“2009-4-4”)-strtotime(“2009-3-1”))/3600*24

8.将 1234567890 转换成 1,234,567,890 每 3 位用逗号隔开的形式。

<?php
$str ='1234567890';
function str($str)
{
    // 反转字符串,得到0987654321
    $str = strrev($str);
    // 使用逗号分割字符串,得到098,765,432,1,
    $str = chunk_split($str,3,',');

    // 再次反转字符串,得到,1,234,567,890
    $str = strrev($str);
    // 去掉左边的",",得到1,234,567,890
    $str = ltrim($str,',');
    return $str;
}
echo str($str);
?>
相关题目 1:如何实现字符串翻转?
strrev(),不过这种方法都不能解决中文字符串翻转的问题,会出错的。
<?php
    header("Content-Type:text/html;charset=utf-8");

    /**
     * 反转utf8编码的中文字符串
     * @param string $str
     * @return string
    */
    function strrev_utf8($str)
    {
        return join("",array_reverse(preg_split("//u", $str)));
    }
    // 实例
    $str = "悄悄是别离的笙箫";
    echo strrev_utf8($str);
?>
相关题目 2:假设现在有一个字符串 www.baidu.com 如何使用 PHP 对它进行操作使字符串以 moc.udiab.输出?
<?php
    $str = "www.baidu.com";
    echo strrev(str_replace('www','',$str));
?>

持续更新中……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值