You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过API向TiddlyWiki推送含空格的text字段数据?

向TiddlyWiki API推送含空格的text字段时curl报错的解决方法

问题场景

尝试通过API向TiddlyWiki推送数据创建新tiddler,多数字段可正常传递,但当text字段值包含空格时,curl命令会因误识别为多个URL而报错。当前使用的命令如下:

curl -X PUT -i "http://192.168.1.166:8080/recipes/default/tiddlers/$title" -H "X-Requested-With: TiddlyWiki" --data $(jq -nc --arg tags "$tag" --arg text "'${content}'" '{ $tags, $text }')

已尝试的方法均未解决问题:

  • 手动嵌套多层引号、用变量包裹内容
  • 用sed将空格替换为%20(会被当作字面量,无实际作用)
  • 使用--data-urlencode "text=${var}",仅title变量正常展开,其他字段未填充

使用环境:zsh shell

解决方案

问题核心是shell参数展开时未正确包裹JSON字符串,导致空格被分割成多个参数。修改后的命令如下:

curl -X PUT -i "http://192.168.1.166:8080/recipes/default/tiddlers/$title" \
  -H "X-Requested-With: TiddlyWiki" \
  --data "$(jq -nc --arg tags "$tag" --arg text "$content" '{ $tags, $text }')"

关键修改点

  1. 给jq输出加双引号:"$(jq ...)"确保zsh将整个JSON输出当作单个完整参数传递给curl,避免空格分割参数。
  2. 移除text参数的额外单引号:jq的--arg会自动将变量内容处理为合法JSON字符串,手动添加的'${content}'会导致JSON格式错误,直接用--arg text "$content"即可。

额外优化(可选)

如果$title包含特殊字符(如空格、&等),需要对其进行URL编码,避免请求路径错误。zsh中可通过print -r -- ${(urlencode)title}实现:

encoded_title=$(print -r -- ${(urlencode)title})
curl -X PUT -i "http://192.168.1.166:8080/recipes/default/tiddlers/$encoded_title" \
  -H "X-Requested-With: TiddlyWiki" \
  --data "$(jq -nc --arg tags "$tag" --arg text "$content" '{ $tags, $text }')"

内容的提问来源于stack exchange,提问作者nerd_noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:30:51