后台上传「产品图 01.jpg」后前台图片全裂,Network 里地址显示成乱码,服务器返回 404,改成英文名再传就正常。乍看像缓存或者权限的锅,追下去往往不是。
php -r 'echo rawurlencode("产品图 01.jpg"), PHP_EOL;'
# 输出 %E4%BA%A7%E5%93%81%E5%9B%BE%2001.jpg
追下去是这么回事:模板直接拼接文件名,没有做 URL 编码,空格被浏览器截断,中文按错误编码发送,服务器找不到对应文件。日志里记下的路径和磁盘上的名字对不上。
「图片 URL 未编码」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
偶发问题先统计频率,一小时几次和一天一次,查法完全不同。改完顺手把文档补一句,省得下次自己重新推一遍。
具体做法是,上传时把文件名转成拼音或哈希,源文件另存原名;输出地址时用 rawurlencode 处理路径段,别整个 URL 一起转;对历史文件做一次批量改名,并替换正文里的旧地址。
验收就看一点,带中文的图片地址能正常打开,控制台没有 404。
