В PHP
что это означает, что функция является binary-safe
?
Что делает их особенными и где они обычно используются?
Это означает, что функция будет работать правильно, когда вы передадите произвольные двоичные данные (т.е. строки, содержащие байты не ASCII и / или нулевые байты).
Например, функция, отличная от двоичного кода, может быть основана на функции C, которая ожидает строки с нулевым завершением, поэтому, если строка содержит нулевой символ, функция будет игнорировать что-либо после нее.
Это актуально, потому что PHP не выполняет чистое разделение строковых и двоичных данных.
Другие пользователи уже упомянули, что такое binary safe
в целом.
В PHP значение более конкретно, ссылаясь только на то, что дает Майкл в качестве примера.
Все строки в PHP связаны с длиной, которая представляет собой количество байтов, которые ее составляют. Когда функция управляет строкой, она может:
0
. Также верно, что все строковые переменные PHP, управляемые движком, также заканчиваются нулем. Проблема с функциями, которые полагаются на 2., заключается в том, что если сама строка содержит байт со значением 0
, функция, которая манипулирует им, будет думать, что строка закончилась в этой точке и после этого будет игнорировать все.
Например, если функция strlen
PHP работала как стандартная библиотека strlen
c, результат здесь был бы неправильным:
$str = "abc\x00abc"; echo strlen($str); //gives 7, not 3!
Дополнительные примеры:
<?php $string1 = "Hello"; $string2 = "Hello\x00World"; // This function is NOT ! binary safe echo strcoll($string1, $string2); // gives 0, strings are equal. // This function is binary safe echo strcmp($string1, $string2); // gives <0, $string1 is less than $string2. ?>
\x
указывает шестнадцатеричную нотацию. См. Строки PHP
0x00 = NULL 0x04 = EOT (End of transmission)
Таблица ASCII для просмотра списка символов ASCII