首页 理论教育PHPMVC开发实战:扩展函数库讲解与应用

PHPMVC开发实战:扩展函数库讲解与应用

【摘要】:下面将分别对常用的扩展函数进行讲解。最终将会得到“一个多字节安全的substr()操作基础上的字...”,读者可以在此基础上继续完善msubstr函数。build_count_rand函数返回的结果是关联数组,在实际应用开发中,可以将结果循环插入数据库等。byte_format函数通常用于上传文件检测,或者统计用户使用空间大小等。

系统扩展函数库能够增强系统的基础特性,在使用时需要使用Load('extend')快捷方法引入扩展函数库。下面将分别对常用的扩展函数进行讲解。

1.auto_charset(自动编码)

auto_charset基础函数封装了iconv函数,能够对gbk、gb232或者utf-8等数据进行相互编码,auto_charset是系统扩展函数,使用时需要额外引入,格式如下所示。

auto_charset($fContents,$from='gbk',$to='utf-8')

其中参数fContents表示需要进行编码的数据;from参数表示当前数据编码类型;to参数表示需要转换的目标编码,常用参数值有gbk、gb2312、utf-8等。下面将使用一个例子示范auto_charset函数的使用,如以下代码所示。

978-7-111-42852-7-Part02-436.jpg

在ThinkPHP中,文件编码必须使用UTF8,所以当前页面中的数据也是utf-8编码。使用auto_charset函数将utf-8转换为gbk后,如果不显式指定charset为gbk,浏览器仍然使用utf-8模式来处理当前页面输出,这样的后果显然是错误的(中文出现乱码)。

2.is_utf8(检测是否UTF8编码)

由于系统只支持UTF8编码的文件,所以当数据不是UTF8编码时,将不能够正确处理。这时可以使用is_utf8函数对数据进行检测,如果不是utf-8编码时,使用前面介绍过的auto_charset函数转换。is_utf8函数格式如下所示。

is_utf8($string)

下面通过一个示例演示is_utf8扩展函数的使用,代码如下所示。

978-7-111-42852-7-Part02-437.jpg

3.msubstr(中文截取)

PHP内置了众多字符串处理的函数,对字符串进行截取的有substr、mb_substr、mb_strcut、str_replace等,当然还有强大的正则表达式。除了正则表达式之外,PHP内置的字符截取函数对中文的支持都是不完善的,msubstr利用了PHP正则及mb_substr函数,实现了对中文字符串的精确截取。msubstr函数格式如下所示。

msubstr($str,$start=0,$length,$charset="utf-8",$suffix=true)

其中参数str表示需要截取的字符串,支持英文、数字、中文(简体或繁体);参数start表示截取的开始位置;length表示截取的最后一个字符位置,默认为不限制,即一直到字符串最后一个字符;charset表示截取的字符串编码;参数suffix为true时把截取剩余部分用“…”代替。下面通过示例演示msubstr函数的使用,代码如下所示。

978-7-111-42852-7-Part02-438.jpg

最终将会得到“一个多字节安全的substr()操作基础上的字...”,读者可以在此基础上继续完善msubstr函数。例如修改截取后缀字符“…”等。

4.rand_string(随机生成密码)

PHP内置的rand函数可以方便地随机生成数字字符串。rand_string对rand函数进行了封装,不仅实现了纯数字随机、字母随机、数字与字母混合随机,还实现了中文字符随机、中文与英文混合随机等。rand_string通常用于自动生成密码,但也可以用于需要自动生成字符的场景,例如验证码、安全问答话题等。rand_string函数格式如下。

rand_string($len=6,$type='',$addChars='')

其中参数len表示随机生成字符串的位数;参数type表示随机字符串的类型,共支持6种类型;addChars表示额外字符(即后缀)。下面对过示例演示rand_string函数的使用,代码如下所示。

978-7-111-42852-7-Part02-439.jpg

在实际应用开发中,通常需要修改参数type,改变该参数的值,将直接影响到随机字符串的形式。type参数有效值由0~5组成,如表9-7所示。(www.chuimin.cn)

表9-7 type参数值

978-7-111-42852-7-Part02-440.jpg

5.build_count_rand(批量生成随机字符串)

rand_string函数一次只能生成一串字符串,build_count_rand函数是基于rand_string函数的,但build_count_rand函数实现了批量生成随机字符串,并将结果保存到数组中。build_count_rand函数格式如下所示。

build_count_rand($number,$length=4,$mode=1)

参数number表示随机批量生成的字符串数量;参数length表示字符串的长度;model参数与rand_string函数中的type参数相同。build_count_rand函数使用非常简单,如以下代码所示。

978-7-111-42852-7-Part02-441.jpg

build_count_rand函数返回的结果是关联数组,在实际应用开发中,可以将结果循环插入数据库等。build_count_rand函数通常用于批量生成优惠劵、虚拟金币等。

6.byte_format(字节格式化)

byte_format一个格式化计算机容量单位的函数。默认情况下,计算机都是以byte(B)为单位的,但对用户而言显然是不友好的,一个普通的网络文件少则几十KB;大的几十MB甚至几百MB。这种情况下就需要对网络文件容量单位进行格式化。byte_format函数可以实现对byte自动格式化为B、KB、MB、GB、TB、PB,对一般的网站而言,最常见的为KB及MB。byte_format函数格式如下。

byte_format($size,$dec=2)

其中参数size表示要转换byte数据大小,1024byte约等于1KB;参数dec表示四舍五入位数。下面通过示例演示byte_format函数的使用,代码如下所示。

978-7-111-42852-7-Part02-442.jpg

上述代码结果将显示“1 GB”。需要注意的是byte_format在Windows平台与Linux等平台格式化结果有所差异(Linux平台以1000byte为基础运算单位)。byte_format函数通常用于上传文件检测,或者统计用户使用空间大小等。

7.highlight_code(代码加亮)

在一些需要原生代码演示的文章系统中,经常需要嵌入高亮代码,并且需要保持代码原有的格式、字体颜色、行号等。传统的做法是先将代码使用htmlspecialchars转义,然后保存到数据库中,取出时再使用htmlspecialchars_decode函数反转义,最后使用HTML标记<pre>原格式输出(还需要结合正则替换)。

使用highlight_code函数输出原代码格式,将变得简单,该函数所接收的代码数据即为最终呈现的代码格式。不仅如此,highlight_code函数还支持直接传入文件路径,返回该文件原生代码。highlight_code函数格式如下所示。

highlight_code($str,$show=false)

参数str表示原生格式代码;参数show表示是否直接输出,为true时返回值,不输出。下面通过示例代码演示highlight_code函数的使用,代码如下所示。

978-7-111-42852-7-Part02-443.jpg

上述代码最终运行结果如图9-6所示。

978-7-111-42852-7-Part02-444.jpg

图9-6 highlight_code高亮代码效果