【问题标题】:CURL escape single quoteCURL 转义单引号
【发布时间】:2015-08-20 15:40:33
【问题描述】:

我怎样才能做到这一点?

curl -XPOST 'http://localhost:9290/location/place' -d '{"geoloc": {"lat": "38.1899", "lon": "-76.5087"}, "longitude": "-76.5087", "admin_name1": "Maryland", "admin_name2": "St. Mary's", "admin_name3": "", "postal_code": "20692", "admin_code3": "", "country_code": "US", "admin_code1": "MD", "latitude": "38.1899", "admin_code2": "037", "accuracy": null, "place_name": "Valley Lee"}'

Mary's 中的 ' 导致此操作失败。我从cat curl-cmd.txt | sh 之类的文件运行它,但它也不能从命令行运行。我试过使用\'\\'\u0027(unicode '

我被卡住了

【问题讨论】:

标签: bash shell curl elasticsearch


【解决方案1】:

我遇到了同样的问题。最简单的解决方案是用反斜杠转义撇号,并将其包含在一组单引号中。 '\''

对于您的用例,将Mary's 更改为Mary'\''s,它应该可以工作。

curl -XPOST 'http://localhost:9290/location/place' -d '{"geoloc": {"lat": "38.1899", "lon": "-76.5087"}, "longitude": "-76.5087", "admin_name1": "Maryland", "admin_name2": "St. Mary'\''s", "admin_name3": "", "postal_code": "20692", "admin_code3": "", "country_code": "US", "admin_code1": "MD", "latitude": "38.1899", "admin_code2": "037", "accuracy": null, "place_name": "Valley Lee"}'

另一种方法是将 POST 数据 (-d) 用双引号括起来,同时用反斜杠转义 JSON 字符串中所有嵌套的双引号。

curl -XPOST 'http://localhost:9290/location/place' -d "{\"geoloc\": {\"lat\": \"38.1899\", \"lon\": \"-76.5087\"}, \"longitude\": \"-76.5087\", \"admin_name1\": \"Maryland\", \"admin_name2\": \"St. Mary's\", \"admin_name3\": \"\", \"postal_code\": \"20692\", \"admin_code3\": \"\", \"country_code\": \"US\", \"admin_code1\": \"MD\", \"latitude\": \"38.1899\", \"admin_code2\": \"037\", \"accuracy\": null, \"place_name\": \"Valley Lee\"}"

【讨论】:

  • 出于某种原因,我需要您从 PHP 的 shell_exec() 调用 curl 的疯狂解决方案,即使我使用的是 --data-urlencode,这可能与 Linux 在字符串到达​​之前处理字符串的方式有关卷曲?不确定。
  • 第一个解决方案在我的 Mac 控制台上不起作用,它产生的效果与根本不转义相同。
  • @PJBrunet - 我认为它是在命令行上执行字符串连接的 shell。 (例如echo 'hello'\''world' -> hello'world
  • 我们可以在URI Search 中实现这个吗?
  • @ASH – 我不确定我是否理解这个问题;您有具体的要求吗?只要您使用的是现代 shell(例如 bash、zsh、sh),这种技术(即 shell 字符串连接)应该适用于任何 curl 请求或命令,而不仅仅是这个特定的 Elasticsearch 请求。
【解决方案2】:

经验法则如果您想在 bash 中明确表示字符串中的单引号或双引号, 使用反斜杠 (\) 取决于你的字符串包装器(应该是同一类型)。反斜杠 (\) 字符用于转义具有特殊含义的字符,例如换行符、反斜杠本身或引号字符。

示例

-双引号示例 - Use \"

如果你想在 bash 上打印 She said "Yes I Do"

echo "She said \"Yes I Do\""
#output:
She said "Yes I Do"

echo 'she said "Yes I Do"' 
#output:
She said "Yes I Do"

-单引号示例 - Use '\''

如果你想在 bash 上打印 My Daughter's dog likes cat treats

echo "My Daughter's dog likes cat treats"
#output:
My Daughter's dog likes cat treats

echo 'My Daughter'\''s dog likes cat treats' 
#output:
My Daughter's dog likes cat treats

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 2015-05-27
    • 2023-04-02
    相关资源
    最近更新 更多