如何在PHP中查找并替换Stripe Webhook订阅描述中的特殊乘号(×)字符?
解决Stripe Webhook订阅描述中乘号在UTF-8邮件中乱码的问题
这问题我之前帮人排查过类似的,大概率是字符编码在邮件渲染环节出现了不兼容的情况——那个×是Unicode的U+00D7(标准乘号),有些老旧邮件客户端或者邮件发送工具在转码时会把它错误解析成乱码(比如你遇到的字母A,其实是编码映射错误的表现)。
给你几个实用的解决方向:
精准替换目标字符
直接在处理Stripe返回的描述字符串时,把这个特殊乘号替换成兼容性更好的字符:- 如果是纯文本邮件,替换成小写字母
x:# Python示例 original_desc = "1 × Base Package (at $25.00 / year)" cleaned_desc = original_desc.replace('×', 'x') # 输出:"1 x Base Package (at $25.00 / year)"// JavaScript示例 const originalDesc = "1 × Base Package (at $25.00 / year)"; const cleanedDesc = originalDesc.replace(/×/g, 'x'); - 如果是HTML邮件,替换成HTML实体
×(渲染后依然显示乘号,且兼容性拉满):cleaned_desc = original_desc.replace('×', '×') # 输出:"1 × Base Package (at $25.00 / year)"
- 如果是纯文本邮件,替换成小写字母
确认邮件编码配置
检查你的邮件发送代码,确保Content-Type头明确指定了UTF-8编码:Content-Type: text/html; charset=utf-8(纯文本邮件则用
text/plain; charset=utf-8),这能避免邮件客户端用错误的编码解析内容。验证原始字符编码
可以先确认Stripe返回的乘号确实是U+00D7:print(ord('×')) # 输出应为215,对应U+00D7避免把其他类似叉号字符(比如U+2716)当成目标字符替换,白忙活一场。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

