ctype_print

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

ctype_print检查字符是否可打印

描述

ctype_print(混合 $text): 布尔值

检查提供的 字符串 text 中的所有字符是否都可打印。

参数

text

要测试的字符串。

注意:

如果提供了 -128 到 255(包含)之间的 整数,则将其解释为单个字符的 ASCII 值(负值会加 256 以允许扩展 ASCII 范围内的字符)。任何其他整数都被解释为包含整数十进制数字的字符串。

警告

从 PHP 8.1.0 开始,传递非字符串参数已被弃用。将来,该参数将被解释为字符串而不是 ASCII 代码点。根据预期的行为,该参数应该要么被强制转换为 字符串,要么显式调用 chr()

返回值

如果 text 中的每个字符实际上都会产生输出(包括空格),则返回 true。如果 text 包含控制字符或根本没有输出或控制功能的字符,则返回 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
"字符串 '$name' 由所有可打印字符组成。\n";
} else {
echo
"字符串 '$name' 不由所有可打印字符组成。\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.

参见

添加注释

用户贡献的注释 4 注释

ClayDragon
5 年前
如上所述,只有 ASCII 字符 32 到 126 被认为是可打印的,所有其他字符,包括 UTF-8 编码的字符,始终被认为不可打印,无论你的语言环境设置如何。因此,例如德语 "ä",欧元符号 "€" 或英镑符号 "£" 将永远不会被认为是可打印的。如果你需要检查超出标准 ASCII 范围的任何字符的可打印性,请使用正则表达式或自己编写一个特定函数。

另请参阅以下讨论:https://grokbase.com/t/php/php-i18n/102tkqe6rk/ctype-print-returns-false-for-british-pound-symbol-and-non-ascii-symbols
匿名
12 年前
只有 ASCII 32 到 126(包含)被认为是可打印的。制表符(ASCII 7)、回车符(ASCII 13)、换行符(ASCII 10)等可能会产生输出,但不被认为是可打印的。
harry at upmind dot com
2 年前
你可以使用此函数检测字符串是否为“二进制”。

<?php
/**
* 通过检查给定值是否只包含可打印字符来确定它是否为二进制字符串。
*
* @param string $value
*
* @return bool
*/
function isBinary($value): bool
{
// 删除“不可打印”的空白字符(制表符、换行符等)
$string = preg_replace('/\s/', '', (string)$value);

return !empty(
$string) && !ctype_print($string);
}
?>
Kalahiri
1 年前
要检查字符串是否只包含 ASCII 字符,请使用 mb_detect_encoding( $string, 'ASCII', true );
To Top