shell中decode一个字符串

现在手上有一个短信发送的接口,只需要post请求就可以,内容通过url中的querystring中content字段确定

function send_sms()
{
    curl "xxxxxx.com?content=$1"
}

现在的问题是因为传入的content经常会有空格,或者一些非法符号,会导致发送失败。经过试验只要将content转换为编码以后的字符串就可以,比如说"北京 上海",替换成"%e5%8c%97%e4%ba%ac++%e4%b8%8a%e6%b5%b7"就可以正常发送了,想请问下shell中可以做到吗?

阅读 5.1k
1 个回答

这种字符串是把汉字转换成了utf-8,如果你是在shell里面发送请求可以用curl命令自带的编码选项,下面是一个转码并用get方式请求百度的例子

curl -G --data-urlencode "wd=北京 上海" www.baidu.com/s

如果你只是需要用shell来获取转换后的字符串,需要用shell命令来模拟转换过程,或者通过shell调用机器上其他语言的函数库中urlencode的实现来获得转换后的结果,比如用node

node -e "console.log(encodeURIComponent('北京 上海'))"

网上也有一些纯shell命令来实现的urlencode,不过正确性需要自己考察

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进