使用 cURL 将“&”提交到 Drupal 6 表单?

使用 cURL 将“&”提交到 Drupal 6 表单?

我使用此代码在 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 编码。

相关内容