フォームデータのエンコーディング

Silk Performer Web API は BDL の dclform セクションにあるフォーム定義を使用して、送信されるフォーム データおよび URL に付加されるクエリ文字列を指定します。

安全でない文字は、クエリ文字列および HTTP リクエスト ボディ内にエンコードする必要があります。 異なる状況の異なるブラウザで使用されるさまざまなエンコード方針に対応するために、Silk Performer ではフォーム フィールドのエンコーディング タイプを指定できます。

これを行うため、BDL 内のフォーム定義の構文が強化されました。この構文を使用すると、フォームとフォーム フィールドの属性を指定できます。

エンコーディング タイプ

エンコーディング タイプ ENCODE_FORM では、MIME タイプ application/x-www-form-url-encoded に応じて、安全でない文字がエンコードされます。 空白スペースは + 記号でエンコードされ、安全でない文字はそれぞれの 16 進形式の前に % 記号を付けてエンコードされます。

すべての一般的なブラウザは、URL クエリ文字列 (HTTP メソッド GET) および HTTP リクエスト ボディ (HTTP メソッド POST) の両方で、フォームの送信にこのエンコーディング タイプを使用しています。

エンコーディング タイプ ENCODE_FORM は、スクリプトで他のエンコーディング タイプが指定されていないときのデフォルトであるため、明示的に指定する必要はありません。

エンコーディング タイプ ENCODE_ESCAPE では、escape JavaScript 関数に応じて、安全でない文字がエンコードされます。 このエンコーディング タイプは ENCODE_FORM と同様です。 主な違いは、空白スペースが + ではなく %20 でエンコードされることです。

エンコーディング タイプ ENCODE_BLANKS では、空白スペースが %20 でエンコードされます。 他の安全でない文字はエンコードされません。 大部分の一般的なブラウザでは、リンクのターゲット URL にこのエンコーディング タイプを使用します。

エンコーディング タイプ ENCODE_NONE では文字がエンコーディングされません。 このエンコーディング タイプは、通常、JavaScript が escape 関数を使用せずに HTTP リクエストを発行する際に使用されます。

使用例

dclform
  AD_SERVER_PARAMS <ENCODE_NONE>:
    "~userpref"     := "12|34|56",
    "~requesttime"  := "01/01/2002";
  FORM_REDIR_LOGIN <ENCODE_NONE> :
    "~language"     := "EN",
    "~logingroup"   := "GUEST",
    "~transaction"  := "TEST",
    "~exitUrl"      := "http://www.myserver.com/goodbye.html";
  LOGIN_FORM_001:
    "username"      := "testuser",
    "password"      := "testpassword",
    "hash"          := "%u2e34!\"" <ENCODE_NONE>,
    "platform"      := "OS: Win2000, Browser: IE5.5" <ENCODE_BLANKS>;
  DOWNLOAD_WHITEPAPER <ENCODE_BLANKS>:
    "filename"      := "Context management.pdf",
    "version"       := "V99";
注: Silk Performer Recorder は最適なエンコーディング タイプを自動的に決定し、それに応じてスクリプトを生成します。 スクリプトをより読みやすくするために、Recorder ではエンコーディング タイプ ENCODE_FORM (デフォルト) が省略されます。