PHP如何判断文件是否含换行符_PHP换行符检测法【格式】

1次阅读

strpos()检测”n”或”r”最快最准,因换行符是单字节ASCII;需注意textarea提交统一为”rn”,而Unicode换行符U+2028/U+2029需额外正则匹配。

PHP如何判断文件是否含换行符_PHP换行符检测法【格式】

php怎么检测字符串里有没有换行符

直接用 strpos() 查找 "n""r" 最快,但要注意:windows 的换行是 "rn"mac 旧系统用 "r"linux/macOS 新系统用 "n"。只查 "n" 会漏掉纯 "r" 换行(少见但存在)。

推荐写法:

if (strpos($content, "n") !== false || strpos($content, "r") !== false) {     // 含换行符 }

不建议用 preg_match('/[rn]/', $content) —— 正则开销大,且没额外收益。

file_get_contents() 读出来的文件内容怎么判断含换行

注意 file_get_contents() 默认不修改内容,换行符原样保留。但如果你后续用了 trim()explode("n", ...) 等操作,可能掩盖原始换行状态。

立即学习PHP免费学习笔记(深入)”;

实操要点:

  • 检测必须在任何“清洗”操作前做
  • 若文件是二进制或编码未知(如 GBK),"n" 字节仍可安全匹配,不影响判断
  • 大文件别全读进内存再查;改用 fopen() + fgets() 逐行读,发现首行有换行就返回 true

为什么 mb_strpos() 不能替代 strpos() 检测换行符

mb_strpos() 是为多字节字符设计的,而 "n""r" 是单字节 ASCII 控制符,在所有编码下都占 1 字节。用 mb_strpos($s, "n") 不仅没必要,还慢 2–3 倍(尤其短字符串)。

例外情况只有:你明确在处理自定义编码且该编码把 0x0A 当作多字节序列的一部分(现实中几乎不存在)。

结论:一律用 strpos(),别碰 mb_strpos() 查换行

从表单 textarea 提交的内容如何可靠检测换行

浏览器提交时,textarea 的换行统一转成 "rn"(无论源系统),但 PHP 接收后,$_POST$_REQUEST 中的值已解码,"rn" 就是字面量。

容易踩的坑:

  • 用了 addslashes() 或 magic quotes(已废弃但遗留代码可能有)→ "n" 变成 "\n",检测失效
  • 前端 js
    .replace(/n/g, '
    ')

    渲染,但没改提交值 → 不影响后端检测

  • 用户粘贴内容带 Unicode 换行符(如 U+2028、U+2029)→ strpos() 查不到,需额外正则:preg_match('/[rnxE2x80xA8xE2x80xA9]/u', $s)

U+2028/U+2029 极少见,除非用户从某些编辑器或 json 直接粘贴,普通 textarea 不会产生。日常检测 "r""n" 足够。

text=ZqhQzanResources