Работа с двоичными данными и перегрузкой 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 на передний план и повторному его копированию (что странно, я нашел какой-то старый код, который делает то же самое, черт возьми).

Итак, я думаю, мой вопрос:

  • Это на самом деле хорошо, чтобы делать?
  • Или я вижу что-то супер очевидное?

0

Решение

Тем не менее, части моего мозга кричат ​​»что ты делаешь … это не способ справиться с этим»!

Ваш мозг прав, в первую очередь вы не должны делать это на PHP. 🙂

Это на самом деле хорошо, чтобы делать?

Это зависит от цели вашего кода.

Я не вижу причин, по которым верхняя часть моей головы могла бы отрезать такой двоичный файл. Так что мой первый инстинкт был бы «нет, нет, нет!» использование распаковать () правильно разобрать двоичный файл в пригодные для использования переменные.

При этом, если вам просто нужно разделить двоичный файл по причинам, то я думаю, что это нормально. Пока ваши тесты подтверждают, что код работает на вас, я не вижу никаких проблем.

В качестве примечания, я не использую перегрузку mbstring именно для этого вида использования, то есть, когда вам нужны строковые функции по умолчанию.

1

Другие решения

МОЕ РЕШЕНИЕ ДЛЯ МУЖЧИН

Мне не нравится отвечать на мои собственные вопросы … но я все же хотел поделиться тем, что решил.

Хотя то, что у меня было, «работало», я все же хотел изменить хакерскую работу кодировки кодировки. Это был старый код, который я признаю, но по какой-то причине я никогда не смотрел на hex2bin bin2hex для этого. Поэтому я решил изменить его, чтобы использовать их.

Полученный новый код:

// $clip_size remains the same value for continuity later,
// only spot-adjusted here... which is why the *2.
$hex_data   = bin2hex( $binary_data );
$first_hunk = hex2bin( substr($hex_data,0,($clip_size*2)) );
$rest_of_it = hex2bin( substr($hex_data,($clip_size*2)) );
if ( !empty($rest_of_it) ) { /* process the result for reasons */ }

Используя шестнадцатеричные функции, превращает беспорядок в то, что mb не будет ввернут в любом случае. Стендовый цикл в 1 миллион показал, что процесс не о чем беспокоиться (и безопаснее работать параллельно самому себе, чем метод manb mb_encoding).

Так что я пойду с этим. Он лучше запоминается и решает мой вопрос на данный момент … пока я снова не вернусь к этому старому коду через несколько лет и не уйду «что я думал ?!»

0

По вопросам рекламы [email protected]