PHP 格式化输出 JSON:一个适合浏览器查看的轻量方法
这篇文章整理了一个在 PHP 5.4 及以上版本中格式化输出 JSON 的简洁方法。重点不在复杂封装,而是说明 `json_encode` 配合 `JSON_UNESCAPED_UNICODE` 与 `JSON_PRETTY_PRINT` 的实际作用,以及如何兼顾浏览器直接输出和字符串返回两种用法。 开发 PHP 接口或排查数据结构时,最常见的问题不是能不能输出 JSON,而是输出后难不难读。
这篇文章整理了一个在 PHP 5.4 及以上版本中格式化输出 JSON 的简洁方法。重点不在复杂封装,而是说明 `json_encode` 配合 `JSON_UNESCAPED_UNICODE` 与 `JSON_PRETTY_PRINT` 的实际作用,以及如何兼顾浏览器直接输出和字符串返回两种用法。 开发 PHP 接口或排查数据结构时,最常见的问题不是能不能输出 JSON,而是输出后难不难读。

PHP 自带的 `print_r` 和 `var_dump` 虽然好用,但直接输出到浏览器时可读性往往很差。本文基于一个改造过的 `ddp()` 函数,拆解它如何通过输出缓冲、换行清理和 HTML 转义,让调试信息更适合网页查看,也说明参数分别解决了什么问题。

排查 Atmosphere 日志里常见的 `Exception during suspend() operation` 时,表面上看像是浏览器关闭导致的无害告警,但沿着 `AtmosphereResourceImpl` 和 `scalatra-atmosphere` 的调用链往下看,真正抛错的位置往往在业务侧的 `Disconnected` 监听。本文按源码路径拆开这条链路,并说明为什么这条 WARN 不该被简单理解为“可忽略”。

在 Jest 里 Mock 全局 `fetch`,关键不是“能不能替换”,而是怎样让返回值、调用链和清理方式都贴近真实环境。文章按常见测试写法拆解 `global.fetch` 的 Mock、可复用 helper、`Response.json()` 链式返回,以及 JSDOM、Node、MSW 的适用边界。 在 JavaScript 单元测试里,Mock `fetch` 看起来只是替换一个全局函数,真正容易出问题的却是返回结构、环境差异和测试收尾。

动态 Cookie 防护的关键,不在于“设置一个 Cookie”,而在于要求客户端在真实浏览器环境里现场算出可校验的凭证。本文按生成、校验、失效原因与表单防刷增强四个环节,梳理这类 JavaScript 反爬机制的工作方式与适用边界。

在微信小程序里接 WebSocket,关键不在语法,而在于它和浏览器原生实现完全不是一套生命周期。本文按连接创建、事件监听、收发控制、重连心跳和主动关闭五个环节梳理规则,帮你判断哪些坑会直接导致断连、报错或消息丢失。

Selection 和 Range 是浏览器里处理文本选区的两把基础工具。前者表示“用户当前选中了什么”,后者负责“代码要操作哪一段”。把两者的职责分清后,就能更稳地实现读取选中文本、设置高亮、移动光标,以及删除、包裹、插入内容等编辑能力。

Jupyter Notebook 想切到深色模式,最省事也最稳定的做法不是手改 CSS,而是直接使用 jupyter-themes。本文整理安装、主题选择、启用命令和回退方法,并补上图表边框、缓存不刷新的常见问题处理。 Jupyter Notebook 想换成深色背景,很多人会先去改 CSS 或找浏览器插件,但这类办法常常只改了界面,图表和输出区域却没跟上。

在宝塔面板里给 ThinkPHP5 做二级域名绑定,真正决定是否生效的不是“把域名加进去”这一步,而是 TP5 的域名部署开关、`__domain__` 路由、DNS 解析、证书覆盖范围,以及 `/public` 运行目录与伪静态是否同时到位。本文按排查顺序梳理关键配置和常见误区。

前端项目要想既吃到浏览器长期缓存的性能红利,又避免用户拿到旧资源,关键不在“清缓存”,而在于让构建产物自带内容哈希,并让 HTML、CI 校验和服务端缓存头一起配合。本文按构建、引用、校验、部署四步梳理可直接落地的做法。

把 JavaScript 内存泄漏纳入自动化性能测试,关键不在“看曲线”,而在把堆增长、DOM 残留和堆快照差异变成可断言指标。本文用 Playwright/Puppeteer、GC 采样、跨浏览器兜底指标和分级阈值,整理一套可直接接入 CI/CD 的拦截方法。

跨域本质上是浏览器同源策略带来的访问限制,Linux 记录并不能直接放行请求,但能帮助你定位是哪一步被拦截。本文按排查与方案选择两条线展开,说明 CORS、JSONP、代理服务器和临时工具各自的适用场景与风险。
