php分割文本转JSON输出_php分割数组json_encode转JSON【步骤】
发布时间 - 2026-01-28 00:00:00 点击率:次PHP中explode()后json_encode()报错或为空,主因是编码非UTF-8、含BOM、空行或不可序列化类型;应先检测转换编码、trim和array_filter清理,多级分隔用str_getcsv,中文输出加JSON_UNESCAPED_UNICODE,大文本改用流式处理。
PHP 用 explode() 分割字符串后直接 json_encode() 报错或输出空数组
常见现象是:原始文本用 explode() 切成数组后,json_encode() 返回 null 或空字符串。根本原因通常是数

null/resource 等不可序列化类型。
实操建议:
- 先用
mb_detect_encoding($str, ['UTF-8', 'GBK', 'BIG5'], true)检查源文本编码,非 UTF-8 就用mb_convert_encoding($str, 'UTF-8', 'GBK')转换 - 分割前用
trim($str)去首尾空白,再用array_filter($arr, 'strlen')清掉空字符串元素 - 避免直接对
explode()结果裸调json_encode(),加一层类型校验:$arr = array_map('trim', explode("\n", $text)); $arr = array_filter($arr, function($v) { return is_string($v) && $v !== ''; }); if (json_encode($arr) === false) { error_log('JSON encode failed: ' . json_last_error_msg()); }
多级分隔符场景下用 str_getcsv() 比 explode() 更稳
当文本含逗号、引号、换行等复杂内容(如 CSV 格式日志),硬用 explode(',', $line) 会切错字段——比如 "a,b",c,"d,e,f" 本该是 3 个字段,explode() 会拆成 5 个。
实操建议:
- 优先用
str_getcsv($line, ',', '"', '\\')解析单行,它自动处理转义和包围符 - 整块文本按行处理时,用
array_map('str_getcsv', array_filter(array_map('trim', explode("\n", $text)))) - 注意
str_getcsv()返回的数组元素默认是字符串,若需数字类型得手动转换,json_encode()不会自动类型推断
json_encode() 输出中文乱码?别漏掉 JSON_UNESCAPED_UNICODE
默认情况下 json_encode() 会把中文转成 \uXXXX 形式,前端拿到的是 Unicode 转义串,不是可读汉字。
实操建议:
- 必须显式传参:
json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) - 如果还乱码,检查 PHP 文件本身是否保存为 UTF-8 无 BOM 格式(尤其 Windows 记事本容易带 BOM)
- 输出前加
header('Content-Type: application/json; charset=utf-8');,避免浏览器误判编码
大文本分割后内存溢出?用 stream_get_line() 流式处理
几 MB 甚至上百 MB 的日志文本,一次性 explode("\n", $big_text) 会把整个字符串加载进内存,极易触发 Fatal error: Allowed memory size exhausted。
实操建议:
- 改用文件流方式逐行读取:
$fp = fopen('data.txt', 'r'); $result = []; while (($line = stream_get_line($fp, 1024, "\n")) !== false) { $line = trim($line); if ($line) $result[] = $line; } fclose($fp); echo json_encode($result, JSON_UNESCAPED_UNICODE); - 每行限制长度(如
1024)防止某一行超长卡死;必要时用fgets()替代stream_get_line()兼容老版本 PHP - 不追求一次性全量 JSON 输出,可配合
yield做生成器分批返回
json_encode() 返回 null 却查不出原因。
# php
# js
# 前端
# json
# windows
# 编码
# 浏览器
# app
# 中文乱码
# csv
# ai
# win
# stream
# NULL
# Resource
# strlen
# fgets
# Error
# 字符串
# 数字类型
# bom
# 不出
# 会把
# 报错
# 切成
# 的是
# 流式
# 序列化
# 空字符串
# 一出
# 就用
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
公司门户网站制作流程,华为官网怎么做?
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
Java解压缩zip - 解压缩多个文件或文件夹实例
如何在阿里云香港服务器快速搭建网站?
如何在宝塔面板中创建新站点?
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
详解jQuery中基本的动画方法
JavaScript如何实现类型判断_typeof和instanceof有什么区别
北京企业网站设计制作公司,北京铁路集团官方网站?
网站建设保证美观性,需要考虑的几点问题!
如何挑选最适合建站的高性能VPS主机?
三星网站视频制作教程下载,三星w23网页如何全屏?
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
如何快速生成可下载的建站源码工具?
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
javascript中闭包概念与用法深入理解
中山网站推广排名,中山信息港登录入口?
如何解决hover在ie6中的兼容性问题
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
如何在阿里云完成域名注册与建站?
java获取注册ip实例
昵图网官网入口 昵图网素材平台官方入口
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
大学网站设计制作软件有哪些,如何将网站制作成自己app?
Laravel如何自定义错误页面(404, 500)?(代码示例)
,南京靠谱的征婚网站?
制作电商网页,电商供应链怎么做?
如何快速查询域名建站关键信息?
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
原生JS实现图片轮播切换效果
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
什么是javascript作用域_全局和局部作用域有什么区别?
,交易猫的商品怎么发布到网站上去?
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
如何将凡科建站内容保存为本地文件?
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
高性能网站服务器配置指南:安全稳定与高效建站核心方案
如何自定义建站之星模板颜色并下载新样式?
如何在阿里云ECS服务器部署织梦CMS网站?
简单实现Android文件上传
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
北京网站制作的公司有哪些,北京白云观官方网站?
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
如何快速查询网址的建站时间与历史轨迹?

