post中字符串中的字符正在自动转义

时间:2014-02-09 17:30:14

标签: ruby sinatra

我通过POST请求发送令牌,但是当我在服务器上看到它们时,它与发送的内容不匹配。

"U2FsdGVkX1+pxBHFdSU4NiSIOdR2GCCBr/WF7AOSF5zQjRqjSoTeOKR0Dzwm\nNT+g\n"< - 原创 "U2FsdGVkX1+pxBHFdSU4NiSIOdR2GCCBr/WF7AOSF5zQjRqjSoTeOKR0Dzwm\\nNT+g\\n"< - 结果

请注意\ n已替换为\\ n。当我进行令牌查找验证时,当然没有找到结果,因为我正在寻找的字符串不再是正确的字符串了!

我不确定为什么这个字符串会像这样自动更改或者如何纠正它。我只是通过这样的标准参数来访问它。

token.verify(params["token"])

  

编辑以进一步明确

我正在使用调试器gem从终端查看此内容。我启用了自动设置并显示params["token"]而没有p或put。我不是想用\ n创建换行符。文字\n是帖子中收到的字符串的实际部分。我使用散列和加密库随机生成一个令牌,字符串有时最终会包含这些字符。如果我从调试器终端运行token.verify(params["token"]),由于在字符串中添加了额外的反斜杠字符,因此没有匹配,所以我从数据库中返回nil。

如果我直接从调试器终端运行token.verify("U2FsdGVkX1+pxBHFdSU4NiSIOdR2GCCBr/WF7AOSF5zQjRqjSoTeOKR0Dzwm\nNT+g\n"),我会从数据库中获取正确的记录。这让我觉得Rack或Sinatra在我有机会触摸它之前会自动转义字符串中的“特殊”字符。

1 个答案:

答案 0 :(得分:0)

这与Ruby处理特殊字符的方式有关。从irb你可以看到这样的快速检查。

"\\n" == '\n'

出乎意料;至少对我来说,这是正确的,因为它们被视为相同。我没有试图处理通过网络传输的特殊字符,而是最终只编写了64位编码。