早上来的时候,移动端同学来问我为啥查询一个条件查不到并发接口如下:
api.php?title=&zzs=YANJI%20ERTONG%20FOOD%20CO.%2CLTD&customer_id=223&token=&s=api%2Fchoujian.cj_korea%2Flists.json
问题集中于 zzs 这个参数,初步认定为 没有 YANJI ERTONG * ,导致了查询失败,于是直接去数据库 LIKE 查询,发现没有符合此条件的结果,遂认定问题。
但,为了严禁起见,只搜索 YANJI ,竟然出现了
再次确认url 参数中的 zzs 参数,字面上没有发现区别,于是考虑是否是 编码问题,遂要来演示demo,打开F12,分别手动输入一遍和粘贴数据库中存储的数据,发现 两个 request 不一致,且程序运算的标示符不一致,更改 粘贴数据的空格为手动输入后,结果一致。
于是目光转移至 空格的编码,页面输出两个空格编码不一致:
%20 和 %C2%A0
搜索确定为以下原因:
https://en.wikipedia.org/wiki/Non-breaking_space
%C2%A0 为 的 UTF-8 编码,故不同空格搜索结果不同。
如上,数据库不好改,且此问题仅出现在 韩国 模块下,替换之:
$map['zzs'] = str_replace(' ', ' ', $map['zzs']);