Является ли значение (не файл) двоичным?

1

У меня есть база данных, которая отправляет почти все данные в виде строковых/числовых значений. Одно поле оказалось двоичным. Когда я вижу двоичное значение $, мне нужно strtoupper (bin2hex ($ value)), чтобы он работал с остальной частью кода.

Я вижу, что PHP 6 будет иметь функцию is_binary. Сейчас я использую эту функцию, но я предполагаю, что будут непредвиденные недостатки. Пожалуйста, дайте мне знать, если вы видите вопиющую проблему.

function is_binary($value)
{
    for($i=0;$i<strlen($value);$i++)
        if(ord($value{$i})>128)
            return true;
    return false;
}

Логика заключается в том, что ни одно из значений буквенно-цифрового поля не будет иметь символ с ASCII-значением выше 128 и все двоичные значения будут.

Для получения дополнительной информации база данных - это Oracle, и тревожные данные выводятся из столбца с типом RAW.

  • 0
    «Двоичные данные» ... Все данные могут быть представлены в двоичном виде. Вы имеете в виду один октет / байт?
  • 0
    @Jamen В PHP «двоичный» четко определен. Например, функция hex2bin не выдает то же значение с семантическим аргументом, что значение hex было технически двоичным с самого начала. Я также объяснил, что данные поступают из типа данных RAW в Oracle, создавая непечатные двоичные символы.
Теги:
binary-data

2 ответа

0

Тип данных RAW просто означает, что Oracle не будет выполнять преобразование набора символов или любое другое преобразование значения столбца при передаче его в приложение. Предполагается, что именно само приложение знает, какие данные хранятся в столбце и интерпретировать его соответствующим образом.

Чтобы определить тип данных столбца таблицы, вам нужно получить доступ к метаданным столбца, например, вызвав odbc_result().

Ваша логика определения того, является ли значение "двоичным" или нет, является ошибочной, как указывали другие. Например, значение, представленное 0x656667 может выглядеть как строка "ABC" для вас, но на самом деле это может быть целочисленное значение 6645351.

  • 0
    Проблема связана с непечатными символами, которые нельзя использовать в запросах. Я выбрал другой маршрут. Если! Ctype_print ($ value), я использую strtoupper (hex2bin ($ value)). Тогда это всегда для печати.
0

Я не думаю, что это сработает. Данные могут быть двоичными, но использовать укусы, которые ниже 128.

Кроме того, вы можете иметь строку UTF-8, например, которая имеет действительные кодовые точки выше 128, и это будет строка, а не двоичная.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню