strrchr参数的问题

今天查PHP官 方文档的时候看到 strrchr函数的用法,有这样一段代码
<?php
// 获取 $PATH 中不含磁盘符号的目录
$dir = substr(strrchr($PATH, ":"), 1);

// 获取最后一行内容
$text = "Line 1\nLine 2\nLine 3";
$last = substr(strrchr($text, 10), 1 );
?>

strrchr(string,char)
Parameter Description
string   必选。指定搜索字符串

char   必选。指定的字符串。如果这是一个数目,它将寻求匹配的字符的ASCII值这个数目,

其中10就是换行的符号的ASSCI码

文档里提到该函数是二进制安全的。

PHP里二进制安全是什么意思?

PHP里,有string的概念。string里,每个字符的大小为byte(与PHP相比,Java的每个字符为Character,是UTF8字符,C语言的每个字符可以在编译时选择)。

byte里,有ASCII代码的字符,例如ABC,123,abc,也有一些特殊字符,例如回车,退格之类的。
特殊字符很多是不能显示的。或者说,他们的显示方式没有标准,例如编码65到哪儿都是字母A,编码97到哪儿都是字符a,退格在有的地方显示成一个符号,在有的地方就会真的把前一个字符退掉。
PHP以C为基础,所以很多描述都是以C为对比。C的字符串里,一种经典的定义就是,以编码0作为字符串的结尾。那么,假设这样一个string,里面3个字符的编码分别是97,0,97。那么,C里面如果有str_replace等效的函数, 利用它把97换成98,那么这个函数读取到0的时候,就认为已经结束了,就会得到98,0,97。跟它对应的,PHP里的str_replace是二进制安全的,那么这个0不会被视为特殊的结束符号,于是结果就是98,0,98。
【二进制安全】在PHP文档里,基本就是这么一个意思:C语言里的功能类似的函数会对有的字符特别处理,而PHP这个函数对于所有字符一视同仁,不用担心会有特殊字符影响处理,特别不用担心编码0字符。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值