我使用此代码在 Drupal 6 中创建一个节点:
curl -b cookies.txt -d \
title="$(sed '1,/sblmtitle/d;/slpstitle/,$d' file.html)" \
-d form_build_id=form-5312da71abefb3bf1f63f1f2b7cf9105 \
-d form_token=f65aaefcf6f4b20c9a3d34f5af13ccaf \
-d form_id=post_node_form -d op=Save http://www.site.com/node/add/post
其中file.html
包含:
spasi
sblmtitle
Some title here & there
slpstitle
Drupal 创建一个带有 title 的节点Some title here
。 Drupal 拒绝该字符&
;
我该怎么做才能让 Drupal 6 接受&
?
答案1
& 在 URL 中具有特殊含义。为了在 URL 中传递真正的 & 符号,您必须将其编码为%26
.您可以使用额外的 sed 表达式进行更改,也可以仅在文件中进行更改。
答案2
&
用于分隔表单字段,请使用正确--data-urlencode
编码的选项&
:
curl -b cookies.txt --data-urlencode \
title="$(sed '1,/sblmtitle/d;/slpstitle/,$d' file.html)" \
-d form_build_id=form-5312da71abefb3bf1f63f1f2b7cf9105 \
-d form_token=f65aaefcf6f4b20c9a3d34f5af13ccaf \
-d form_id=post_node_form -d op=Save http://www.site.com/node/add/post
来自手册页
--data-urlencode
(HTTP) 这会发布数据,与其他 --data 选项类似,但它执行 URL 编码。 (7.18.0 中添加)name=content
这将使curl 对内容部分进行URL 编码并将其传递。请注意,名称部分预计已进行 URL 编码。