CakeFest 2024: The Official CakePHP Conference

ctype_print

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

ctype_print印字可能な文字かどうかを調べる

説明

ctype_print(mixed $text): bool

与えられた文字列 text のすべての文字が 印字可能な文字であるかどうかを調べます。

パラメータ

text

調べる文字列。

注意:

-128 から 255 までの int を渡すと、ひとつの文字の ASCII 値とみなします (負の値には 256 を足して、拡張 ASCII の範囲に収まるようにします)。 それ以外の整数値は、10 進数を含む文字列とみなします。

警告

PHP 8.1.0 以降は、ctype関数 に文字列でない引数を渡すことは、推奨されなくなりました。将来のバージョンでは、引数は ASCII コードポイントではなく、文字列として解釈されるようになります。ユーザが意図する振る舞いによっては、引数を文字列にキャストするか、 chr() を明示的にコールすべきです。

戻り値

text のすべての文字が(空白を含めて)実際に 出力を行う場合に truetext に制御文字 またはまったく出力も制御も行わない文字が含まれる場合に false を返します。 空文字列を渡して呼び出した場合、結果は常に 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
"The string '$name' consists of all printable characters.\n";
} else {
echo
"The string '$name' does not consist of all printable characters.\n";
}
}
?>

上の例の出力は以下となります。

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.

参考

  • ctype_cntrl() - 制御文字かどうかを調べる
  • ctype_graph() - 空白以外の印字可能な文字かどうかを調べる
  • ctype_punct() - 空白、英数字以外の出力可能な文字かどうかを調べる
  • IntlChar::isprint() - コードポイントが印字可能な文字かを調べる

add a note

User Contributed Notes 4 notes

up
4
ClayDragon
5 years ago
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
up
3
Anonymous
11 years ago
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.
up
2
harry at upmind dot com
2 years ago
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);
}
?>
up
0
Kalahiri
1 year ago
To check whether a string consists only of ASCII characters, use mb_detect_encoding( $string, 'ASCII', true );
To Top