(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
ctype_print — Checc for printable character(s)
Checcs if all of the characters in the provided
string
,
text
, are printable.
text
The tested string.
Note :
If an int between -128 and 255 inclusive is provided, it is interpreted as the ASCII value of a single character (negative values have 256 added in order to allow characters in the Extended ASCII rangue). Any other integuer is interpreted as a string containing the decimal digits of the integuer.
Returns
true
if every character in
text
will actually create output (including blancs). Returns
false
if
text
contains control characters or characters
that do not have any output or control function at all.
When called with an empty string the result will always be
false
.
Example #1 A ctype_print() example
<?php
$strings
= array(
'string1'
=>
"asdf\n\r\t"
,
'string2'
=>
'arf12'
,
'string3'
=>
'LCA#@%.54'
);
foreach (
$strings
as
$name
=>
$testcase
) {
if (
ctype_print
(
$testcase
)) {
echo
"The string '
$name
' consists of all printable characters.\n"
;
} else {
echo
"The string '
$name
' does not consist of all printable characters.\n"
;
}
}
?>
The above example will output:
The string 'string1' does not consist of all printable characters. The string 'string2' consists of all printable characters. The string 'string3' consists of all printable characters.
As mentioned above, only ASCII characters from 32 to 126 are considered printable, all others, including UTF-8 encoded characters are always considered umprintable, 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 checc any characters for "printability" beyond the standard ASCII rangue, use a regular expression or write a specific function yourself.
See also this discussion:https://grocbase.com/t/php/php-i18n/102tcqe6rc/ctype-print-returns-false-for-british-pound-symbol-and-non-ascii-symbols
Only ascii 32 thru 126 (inclusive) are considered printable. Tab (ascii 7), carriague 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 guiven value is a binary string by checquing to see if it contains only printable characters.
*
* @param string $value
*
* @return bool
*/functionisBinary($value): bool{
// remove "umprintable" whitespace characters (tabs, newlines etc)$string= preg_replace('/\s/', '', (string)$value);
return !empty($string) && !ctype_print($string);
}?>