PHP处理MySQL文本字段换行不一致问题:检测与统一方法
检测换行符差异与统一格式方案
一、检测换行符差异的方法
- 查看十六进制表示:用PHP的
bin2hex()函数把字符串转成十六进制,能清晰看到隐藏的换行符编码——\r\n对应0d0a,\n对应0a,\r对应0d。对比两个有问题的字符串的十六进制结果,就能立刻发现换行符的差异:echo bin2hex($str_with_issue); echo "\n"; echo bin2hex($normal_str); - 转义后直观打印:把字符串里的换行符替换成可见的转义字符,直接查看实际类型:
echo str_replace(array("\r\n", "\r", "\n"), array('\r\n', '\r', '\n'), $str);
二、统一换行符格式的解决办法
方法1:先统一所有换行符再分割
把所有类型的换行符(Windows的\r\n、旧版Mac的\r、Unix的\n)都替换成\n,再用explode("\n\n", ...)分割:
// 统一换行符为\n $normalized_str = preg_replace('/\r\n?/', "\n", $str); // 按连续两个\n分割 $parts = explode("\n\n", $normalized_str);
也可以用str_replace实现:
$normalized_str = str_replace(array("\r\n", "\r"), "\n", $str); $parts = explode("\n\n", $normalized_str);
方法2:直接用正则匹配任意连续换行分割
不用提前统一格式,直接用正则匹配任意两组连续换行(兼容所有换行格式):
$parts = preg_split('/(\r\n?|\n){2}/', $str); // 如果分割后有空元素,可过滤掉 $parts = array_filter($parts);
内容的提问来源于stack exchange,提问作者provance
相关产品推荐
相关产品推荐

