业务场景是一个翻译功能,集成了百度翻译的 sdk API 如下:
HTTParty.get("#{url}?appid=#{app_id}&q=#{q}&from=#{from}&to=#{to}&salt=#{salt}&sign=#{sign}")
q 是我要翻译的原文。from 是翻译源语言,to 是译文语言,salt 是随机数,sign 是这些参数经过 MD5 的验签。 问题就出在了参数 q 上! 假如 q 里面包含特殊字符“+”,比如 q=“我是 + 小强”url 将会是
http://api.fanyi.baidu.com/api/trans/vip/translate?q=我是+小强&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4
我的意愿是将翻译成:I'm a + little strong 但就是 url 里面这个特殊字符导致签名过不去,我改怎么处理? 追加:这个应该和签名没关系,主要原因是我 url 里暴露了非法的特殊字符导致的