(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
ctype_print — Проверяет печатные символы
Функция проверяет, состоит ли строка (string )
в аргументе text только из печатных символов.
textПроверяемая строка.
Замечание: Функция интерпретирует целое число (int ) как ASCII-значение одного символа, если передали целое число в диапазоне между -128 и 255 включительно; к отрицательным значениям добавляется 256, чтобы разрешить символы из диапазона кодировки Extended ASCII. Остальные целые числа обрабатываются как строки, которые содержат десятичные цифры целого числа.
Функция возвращает true , если каждый символ в строке text
фактически создаёт вывод (включая пробелы). Функция возвращает false , если
аргумент text содержит управляющие символы, или символы,
которые не имеют вывода или функции управления.
При вызове с пустой строкой результатом всегда будет false .
Пример #1 Пример проверки печатных символов функцией ctype_print()
<?php
$strings = array('string1' => "asdf\n\r\t", 'string2' => 'arf12', 'string3' => 'LKA#@%.54');
foreach ($strings as $name => $testcase) {
if (ctype_print($testcase)) {
echo "Строка '$name' состоит только из печатных символов.\n";
} else {
echo "Строка '$name' состоит не только из печатных символов.\n";
}
}
?>Результат выполнения приведённого примера:
Строка 'string1' состоит не только из печатных символов. Строка 'string2' состоит только из печатных символов. Строка 'string3' состоит только из печатных символов.
As mentioned above, only ASCII characters from 32 to 126 are considered printable, all others, including UTF-8 encoded characters are always considered unprintable, no matter what your locale settings are. Therefore, e.g. German "ä", the Euro sign "€" or the British pound symbol "£" will never be printable. If you need to check any characters for "printability" beyond the standard ASCII range, use a regular expression or write a specific function yourself.
See also this discussion: https://grokbase.com/t/php/php-i18n/102tkqe6rk/ctype-print-returns-false-for-british-pound-symbol-and-non-ascii-symbols Only ascii 32 thru 126 (inclusive) are considered printable. Tab (ascii 7), carriage return (ascii 13), linefeed (ascii 10) etc may produce output but are not considered printable.You can use this function to detect if a string is "binary".
<?php
/**
* Determine whether the given value is a binary string by checking to see if it contains only printable characters.
*
* @param string $value
*
* @return bool
*/
function isBinary($value): bool
{
// remove "unprintable" whitespace characters (tabs, newlines etc)
$string = preg_replace('/\s/', '', (string)$value);
return !empty($string) && !ctype_print($string);
}
?>