我这里有一段代码,我需要保证,或者“不,不,不!” 关于我是否以正确或完全错误的方式考虑这个问题。
这必须处理在特定位置切割二进制数据变量,还必须处理多字节重载函数。例如substr
实际上是mb_substr
和strlen
是mb_strlen
等。
我们的服务器设置为UTF-8
内部编码,所以我做了一个奇怪的小事情来规避它进行二进制数据操作:
// $binary_data is the incoming variable with binary
// $clip_size is generally 16, 32 or 64 etc
$curenc = mb_internal_encoding();// this should be "UTF-8"
mb_internal_encoding('ISO-8859-1');// change so mb_ overloading doesnt screw this up
if (strlen($binary_data) >= $clip_size) {
$first_hunk = substr($binary_data,0,$clip_size);
$rest_of_it = substr($binary_data,$clip_size);
} else {
// skip since its shorter than expected
}
mb_internal_encoding($curenc);// put this back now
我不能真正显示输入和输出结果,因为它是二进制数据。但是使用上述方法的测试似乎工作得很好,没有任何问题......
然而,我的部分大脑在尖叫“你在做什么……这不是处理这个问题的方法”!
笔记:
- 进来的二进制数据是这两个部分的串联。
- 第一部分的大小始终是已知的(但会发生变化)。
- 第二部分的大小完全未知。
- 这非常接近于加密并将IV填充在前面并再次将其撕掉(奇怪的是,我发现了一些做同样事情的旧代码哈哈)。
所以,我想我的问题是:
- 这真的很好吗?
- 还是我忽略了一些非常明显的东西?