PHP Conference Japan 2024

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
6 年前
如上所述,只有 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
3 年前
您可以使用此函数检测字符串是否为“二进制”。

<?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