strlen()能准确包含\r和\n,因其按字节计数,而\r、\n各占1字节;PHP字符串本质是字节序列,该函数不解析字符语义,仅统计实际字节数。

PHP 7.3 中判断字符串长度(含回车符)直接用 strlen() 即可——它统计的是**字节数**,而回车符 \r(ASCII 13)、换行符 \n(ASCII 10)各占 1 字节,天然被计入。
为什么 strlen() 能准确包含 \r 和 \n
PHP 的字符串是字节序列,strlen() 不做字符语义解析,只数实际字节数。例如:
-
$str = "a\r\nb";→ 实际字节为a(1)、\r(1)、\n(1)、b(1),strlen($str)返回 4 -
$str = "hello\r";→ 长度是 6(5 个字母 + 1 个回车)
注意:别误用 mb_strlen()(除非真要按字符计数)
mb_strlen() 默认按 Unicode 字符计数,对 ASCII 字符(包括 \r、\n)仍算作 1 个字符,结果和 strlen() 一样。但它依赖扩展和编码设置,若未指定编码(如 mb_strlen($str, 'UTF-8')),可能因默认编码不一致导致意外行为。纯 ASCII 场景下没必要绕弯子。
验证回车符是否真的存在
仅看长度不够?想确认字符串末尾或中间是否有 \r,可用:
立即学习“PHP免费学习笔记(深入)”;
-
str_contains($str, "\r")(PHP 8.0+) -
strpos($str, "\r") !== false(兼容 PHP 7.3) - 用
bin2hex($str)查看十六进制,\r显示为0d,\n为0a
读取文件时的常见陷阱
用 file_get_contents() 或 fgets() 读取文本文件时,不同系统换行符不同:
– Windows 是 \r\n(2 字节),
– Unix/Linux/macOS 是 \n(1 字节)。strlen() 会如实反映这些差异,无需额外处理。



















