ここには、保証または「いいえいいえ!」のいずれかが必要なコードがあります。私がこれについて正しい方法で考えているのか、それとも完全に間違った方法で考えているのかについて。
これは、特定の場所でバイナリ データの変数を切り取り、マルチバイトのオーバーロードされた関数を処理する必要があります。たとえば、substr
is reallymb_substr
やstrlen
ismb_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
バイナリデータなので、入出力結果を実際に表示することはできません。しかし、上記を使用したテストはうまく機能しているようで、何も壊れていません...
しかし、私の脳の一部は「何をしているの...これはこれを処理する方法ではありません」と叫んでいます!
ノート:
- 入ってくるバイナリ データは、そもそもこれら 2 つの部分を連結したものです。
- 最初の部分のサイズは常にわかっています (ただし、変更されます)。
- 2 番目の部分のサイズはまったく不明です。
- これは、暗号化にかなり近いもので、IV を前に詰め込んで、再び剥ぎ取っています (奇妙なことに、これと同じことを行う古いコードを見つけました笑)。
だから、私の質問は次のとおりだと思います:
- これは実際に行っても問題ありませんか?
- それとも、私が見落としている非常に明白なものがありますか?