PHP: Определите, является ли строка либо текстом, либо бинарным, на строках без байтов NULPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 PHP: Определите, является ли строка либо текстом, либо бинарным, на строках без байтов NUL

Сообщение Anonymous »

А именно, как бы вы сообщили строку, которая содержит бинарные данные из text в строке, которая не имеет nul байты? Я пытаюсь реализовать: < /p>
  • A Полный PHP < /strong> Solution < /li>
    С Нет
    внешние библиотеки
  • кодирование-aware
  • Последовательный
  • и быстро достаточно, чтобы справиться с длинными потоками
Вот лучшее решение, которое я столкнулся (среди всех неработающих), которое полагается на MBString Семейство функций:

Код: Выделить всё

function isBinaryStream(string $stream) : bool {
// 1) Try to detect encoding
// $encoding is a prioritized list of encodings (from less widely used to most widely used) for many Western and East Asian applications
$encoding = mb_detect_encoding($stream, [
'UTF-8', 'GB18030', 'BIG-5', 'EUC-JP', 'SJIS', 'ASCII', 'Windows-1252', 'ISO-8859-1', 'Windows-1251', 'KOI8-R',
], true);
if ($encoding !== 'UTF-8') {
$stream = mb_convert_encoding($stream, 'UTF-8', $encoding);
}

// 2) Split into characters and convert to code points
$chars = mb_str_split($stream, 1, 'UTF-8');
if (! $chars) {
return true;
}
$ordValues = array_map('mb_ord', $chars);

// 3) Disallow control chars except \t(9), \n(10), \r(13) and disallow code points above 0x10FFFF (invalid Unicode)
foreach ($ordValues as $ord) {
if ($ord < 0x20 && ! in_array($ord, [9, 10, 13], true)) {
return true;
}
if ($ord > 0x10FFFF) {
return true;
}
}

// If we are here, we consider $stream textual
return false;
}
< /code>
попробовал это решение с помощью ctype_print, и это также дало мне много ложных срабатываний. < /p>
факт, что я намеренно работаю над Строки, которые не имеют никакого NUL 
байт (по дизайну), и я чувствую, что моя реализация Isbinarystream отсутствует. Я не совсем уверен, что это будет работать только для текстовых потоков на незападных кодировках. Кроме того, я клянусь, что это может быть чрезвычайно оптимизировано. < /P>
Что вы предлагаете? Спасибо за совет.

Подробнее здесь: https://stackoverflow.com/questions/794 ... o-nul-byte
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • PHP: Определите, является ли строка либо текстом, либо бинарным, на строках без байтов NUL
    Anonymous » » в форуме Php
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Как извлечь количество байтов из списка «байтов» и поместить в новый список «байтов»
    Гость » » в форуме Python
    0 Ответы
    118 Просмотры
    Последнее сообщение Гость
  • PHP: Определите, является ли строка либо текстом, либо двоичным
    Anonymous » » в форуме Php
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • PHP: Определите, является ли строка либо текстом, либо двоичным
    Anonymous » » в форуме Php
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Как удалить искаженные символы в строках, вызванные потерей байтов в PHP?
    Anonymous » » в форуме Php
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»