여기 코드 중 하나에 보증이 필요하거나 "아니오, 아니오"라고 표시되어 있습니다. 나는 이것에 대해 오른쪽 또는 완전히 잘못된 방식으로 생각하고 있는지에 관해서입니다.바이너리 데이터 및 mb_function 오버로드 처리?
이 기능은 특정 지점에서 이진 데이터의 변수를 잘라내거나 다중 바이트 오버로드 된 기능을 처리해야합니다. 예를 들어 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를 채우고 다시 찢어 버립니다 (이상하게도, 나는이 똑같은 일을하는 오래된 코드를 발견했습니다).
그래서, 내 질문은 추측 :
- 이 실제로 괜찮 일을 할?
- 아니면 내가 간과하고있는 뭔가 명백한가요?
코드에서 변수를 사용하기 위해 바이너리를 구문 분석하려고합니까? $ first_hunk와 $ rest_of_it의 목적은 무엇입니까? – rlanvin
최종 목적은 다소 모호 합니다만, 나는 들어 가지 않을 것입니다.) ...하지만이 작업이 끝나면 첫 번째 변수와 두 번째 변수가 원래 바이너리 데이터의 두 부분으로 끝나야한다고 말할 수 있습니다 (클립 길이) (이상한 방법을 사용하면 OK입니다). – IncredibleHat
바이너리에 대한 메모를 더 추가했습니다. – IncredibleHat