php里的二进制安全

二进制安全功能(binary-safe function)是指在一个二进制文件上所执行的不更改文件内容的功能或者操作。这能够保证文件不会因为某些操作而遭到损坏。二进制数据是按照一串0和 1的形式编码的。而绝大多数的程序会给某些特殊的比特串赋予不同的格式代码,所以当用户使用一个程序读取一个二进制文件时,该文件会被按照这个程序的规则 进行解释。如果这个程序所使用的格式编码和文件被写入的格式编码一致,那么这个文件可以被正常读取,否则该文件的格式代码之中会被附加一些无意义的符号, 也可能会导致文件损坏。如果最严重的情况发生,这样的操作会因为损坏导致你的数据永久丢失。所以你应该将重要的文件保存在只读性的存储介质上,例如光盘。

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字符。

时间: 2024-11-20 20:29:53

php里的二进制安全的相关文章

java从url里获取二进制数据

package zhucepeiyu15; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException

二进制有什么好处,为何电脑都采用二进制?

……………………………………………………………………………………二进制的内心小剧场……………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………………………………………………………………………………… 很多专业人士从第一次学计算机,就开始接触二进制,发现书上说的基本都是术语,不是“人话”,马上晕倒.二进制是什么?什么“逢二进一”,这都不重要,狗屎.只要是人发明的东西,用人话就能讲清楚

【POJ1014】Dividing 多重背包,二进制物品拆分转01背包

直接做01背包,即把物品数量累加,做20000物品的01背包指定TLE,不用我说了吧! 本文的优化是二进制优化,O(logn),至于完全背包记录已使用个数的O(n)算法本文不进行讲解,在博客的"背包"分类里. 二进制优化: 大家知道一个十进制数可以转换成二进制,那么假设某种物品有1023种,即2^10-1,二进制为111111111,则可以视为每一位分别是一个由{1,2,4,8,16,32,64,128,256,512}个物品糅合成的大物品,二进制数每一位0表示不取,1表示取,这样我们

负数的二进制表示方法

转自:http://blog.sina.com.cn/s/blog_56d8ea900100y65b.html 一:表示法:1.正数5的表示法假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为:00000000 00000000 00000000 000001015转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0. 2.负数-5的表示法现在想知道,-5在计算机中如何表示?在计算机中,负数以原码的补码形式表达. 二.概念:1.原码:一个正数,按照绝

图片和二进制间的转换

1.根据路径把图片转成二进制保存在数据库里 public bool SaveImage(string filePath) { bool isSuccess = false; string FilePath = filePath; string filename = FilePath.Substring(FilePath.LastIndexOf("\\") + 1); //得到上传文件的文名 string filetext = string.Empty; FileStream fs =

负数二进制在32位int表示

在计算机中,负数以其正值的补码形式表达 什么叫补码呢?这得从原码,反码说起. 原码:一个整数,按照绝对值大小转换成的二进制数,称为原码. 比如 00000000 00000000 00000000 00000101 是 5的 原码. 反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码. 取反操作指:原为1,得0:原为0,得1.(1变0; 0变1) 比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111

关于java按位操作运算

<1>.在了解位移之前,先了解一下正数和负数的二进制表示形式以及关系:举例15和-15: 15 的原码: 00000000 00000000 00000000 00001111     补码: 11111111 11111111 11111111 11110000                 +1 = -15的原码:11111111 11111111 11111111 11110001 负数的原码即为:正数的原码取反,再加1. <2>位移操作:(只针对 int类型的数据有效,j

WINDOWS下安装PHP7出现PHP-CGI无法启动

事情经过:下载PHP 7.0 然后运行,发现php-cgi一直挂掉.启动不起来.我直接到文件夹下启动PHP-CGI 启动, 失败,报错提示:缺失vcruntime140.dll.当时心中暗暗一笑,当年玩单机的时候 不也经常出现这个BUG,去百度,脚本之家下了个对应的dll,放到系统目录下,64位的放到C:\Windows\SysWOW64. 然后 开始->运行->regsvr32 vcruntime140.dll ,居然报错,文件不在目录里或者二进制数据流出现问题,大概意思就是 文件是烂的,我

20145339《信息安全系统设计基础》第2周学习总结

编辑器(vim) 一·完成对所录入文字的编辑功能,最常用的是vi(vim)和emacs 二·vi的三种模式及用法 1.命令行模式:最初进入的默认模式,可上下移动光标进行删除字符或整行删除,也可进行复制粘贴,但无法编辑. 2.插入模式:可以编辑,按[Esc]键回到命令行模式. 3.底行模式:可以进行保存或退出,或设置编辑环境. 三·vim教程总结 :q!会舍弃所做的任何改动: 按下A以启用编辑,按下esc退出: 光标放在欲删除的单词处,按下dw可以删除单词:c$可以删除到行末;输入d$,删除从当前