前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >见鬼了:数据库中有“A+A”,但页面搜不到???

见鬼了:数据库中有“A+A”,但页面搜不到???

作者头像
烟雨平生
发布2024-03-18 17:34:26
900
发布2024-03-18 17:34:26
举报
文章被收录于专栏:数字化之路数字化之路

概述

近期,用户反馈在使用我们的品牌搜索功能时,无法找到包含“A+A”这个品牌,搜索其它品牌时无异常。经过复现测试,确认了这一问题的存在。本文将详细分析导致该问题的原因,并提出相应的解决方案。

问题复现

在进行问题复现的过程中,我们发现当尝试在搜索框中输入“A+A”并执行搜索时,结果页面中没有A+A。

原因分析

用户搜索时期望的效果与mysql like %搜索关键字%相同。 由于品牌的数量有限且数据量不大,在实际实现时,也是这样做的。

是不是“A+A”这个品牌不存在?

不是。 在品牌列表中是有的:

其他的都正常,"A+A"为什么没搜到?

也不知道。查了下日志,发现系统收到的查询关键字变了,不是A+A,而是:A%20A

%20是什么?是空格。

也就是在前端页面输入的+,到了服务器,变成了空格!!!

对比使用A+A的搜索结果,发现命中的都是带有“A A”的品牌信息:

为什么“+”变成空格了呢?

如下图所示,查询参数放在QueryString中了,也就是查询参数“A+A”是通过Url来传递的。

那么,问题搞清楚了: 根本原因在于,在URL中,加号(+)被视为一个特殊字符,通常用于表示空格。

因此,Web服务器将URL上的“A+A”理解为“A A”。 这导致服务器无法使用“A A”匹配到用户期望的“A+A”,从而影响了搜索结果的准确性。

复盘

回顾整个问题的发生,我们意识到在设计API时,没有充分考虑到特殊字符的处理。尽管加号在URL中有特定的含义,但在我们的应用场景中,它应该被视为普通字符进行处理。这一疏忽导致了用户在搜索包含加号的内容时遇到了困难。

解决方案

方案1、使用body来传递查询参数

这个方案的优缺点: 缺点:前后端都需要进行改动。都要重新开发、测试、发布。 优点:彻底。不会再因为参数中URL中的特殊字段,而导致参数传递时出现发收不一致。

推荐作为长期方案。

方案2、服务端对“A A”进行特殊处理

这个方案的优缺点: 优点:只需要后端进行改动。 缺点:用户输入A+时无法搜到期望的结果。品牌名称中出现其它URL保留字时,仍然会搜到期望的结果。

临时过渡方案,不推荐作为长期方案。

方案3、给“A+A”品牌起个别名,譬如“A加A”

这个方案的优缺点:

优点:只需要后端进行改动。 缺点:品牌名称中出现其它URL保留字时,仍然会搜不到期望的结果。 增加用户的学习成本,用户需要知道如果想搜“A+A”,需要输入“A加A”。 并且在用户看来,这个知识有些不可理解。这会影响用户体验,影响用户对系统强大与否的心智。

临时过渡方案,不推荐作为长期方案。

小结

通过仔细分析和解决问题,我们成功地解决了用户反馈的“A+A”搜索问题。这次经历提醒我们在设计和开发过程中要充分考虑特殊字符的处理,并确保服务器能够准确地理解和满足用户的搜索需求。通过持续改进和优化,我们致力于为用户提供更加准确、便捷的搜索体验。

REFERENCE

UrlEncode编码/解码 https://tool.chinaz.com/tools/urlencode.aspx

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 的数字化之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 问题复现
  • 原因分析
  • 复盘
  • 解决方案
  • 小结
  • REFERENCE
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档