PHP Conference Japan 2024

ctype_print

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

ctype_print檢查是否有可列印的字元

描述

ctype_print(mixed $text): bool

檢查提供的 stringtext 中的所有字元是否為可列印字元。

參數

text

要測試的字串。

注意:

如果提供的 int 介於 -128 和 255 之間(包含),則將其解譯為單一字元的 ASCII 值(負值會加上 256,以便允許擴充 ASCII 範圍中的字元)。任何其他整數都會解譯為包含該整數十進位數字的字串。

警告

從 PHP 8.1.0 開始,傳遞非字串引數已棄用。未來,該引數將被解譯為字串,而不是 ASCII 碼位。根據預期的行為,引數應轉換為 string 或明確呼叫 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 則註解

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
3
Anonymous
12 年前
只有 ascii 32 到 126(包含)才被視為可列印。Tab(ascii 7)、換行符號(ascii 13)、換行(ascii 10)等可能會產生輸出,但不被視為可列印。
2
harry at upmind dot com
3 年前
您可以使用此函式來偵測字串是否為「二進制」。

<?php
/**
* 透過檢查是否僅包含可列印字元來判斷給定的值是否為二進制字串。
*
* @param string $value
*
* @return bool
*/
function isBinary($value): bool
{
// 移除「不可列印」的空白字元(Tab、換行符號等)
$string = preg_replace('/\s/', '', (string)$value);

return !empty(
$string) && !ctype_print($string);
}
?>
0
Kalahiri
1 年前
若要檢查字串是否僅由 ASCII 字元組成,請使用 mb_detect_encoding( $string, 'ASCII', true );
To Top