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はタイトル付きのノードを作成します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
これにより、カールはコンテンツ部分をURLエンコードして渡します。名前部分はURLでエンコードする必要があります。

関連情報