首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如果文本中有撇号,则松弛传入的web钩子无法工作。

如果文本中有撇号,则松弛传入的web钩子无法工作。
EN

Stack Overflow用户
提问于 2017-09-21 04:40:55
回答 1查看 1.3K关注 0票数 2

我有一个即将到来的网页钩子,作为一个通知系统,在我的红宝石为基础的网络应用(使用西纳屈,而不是Rails)的变化。

下面是向web钩子发送数据的ruby方法的代码(来自webhook_url的敏感信息被编辑为.):

代码语言:javascript
代码运行次数:0
运行
复制
def notify_slack(text, user)
    webhook_url = "https://hooks.slack.com/services/[...]/[...]/[...]"
    payload = {
      :channel => "#app-changelog",
      :username => "Changelog Bot",
      :attachments => [
        {
          :fields => [
            {
              :title => "Change Description",
              :value => text
            },
            {
              :title => "Changed By:",
              :value => user,
              :short => true
            }
          ]
        }
      ]
    }.to_json
    cmd = "curl -X POST --data-urlencode 'payload=#{payload}' #{webhook_url}" 
    system(cmd) 
end

在该方法中,text参数是保存更改描述的字符串,而user参数是保存更改负责人的名称的字符串。

但是,如果text参数中有一个撇号',那么它不会显示任何松弛的内容。

我尝试过在'参数中转义text,但这不起作用--我求助于移除撇号,但无法解释任何用户可能在任何情况下都包括撇号的情况。另外,根据slack的消息生成器,撇号应该是可能的。

知道我能做什么来解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2017-09-21 04:59:28

松弛的API调用没有什么问题。问题就在这条线上:

代码语言:javascript
代码运行次数:0
运行
复制
"curl -X POST --data-urlencode 'payload=#{payload}' #{webhook_url}"

请注意,您正在使用单引号来定义有效负载的限制。因此,在payload中,如果有一个单引号,它将变成如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
"curl -X POST --data-urlencode 'payload=david's new bike' #{webhook_url}"

现在,您可以观察到,有效负载应该以结束,但以david结尾,而额外的文本对于curl命令无效。

您可以尝试用\'替换单引号,这应该有效。

代码语言:javascript
代码运行次数:0
运行
复制
payload=#{payload.gsub('\'', %q(\\\'))}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46335609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档