CGI
述語名/引数 | (cgi_decode *s *X) |
要約 | POSTメソッドにより送信されたデータをデコードします。 |
互換性 | Win Unix |
解説 | N/A |
例:
(as (showBBS):
(printf "Content-type: text/html\n\n")
(printf "<html><body>")
(getenv "CONTENT_LENGTH" *len);データの長さが環境変数にセットされる。
(atoi *len *i_len);文字列を整数に変換
(stdin *i_len *s);データを標準出力から読み込み
(cgi_decode *s *ll);デーコードする。
(print *ll);;デコードした結果を表示
(printf "<hr><div align=\"right\" >(c) 2000-2001 KOIKE </div>")
(printf "</body>\n</html>\n")
)
述語名/引数 | (cgi_encode *s *X) (url_encode *s *X) |
要約 | POSTメソッド用にデータをエンコードします。 |
互換性 | Win Unix |
引数 | *s [in] 名前と値のペアのリスト *X [out] エンコードされた文字列 |
成功/失敗 | true エンコーディングに成功し*Xに関するマッチングに成功した。 false 上記以外 |
解説 | *sに与えるS式は、( ("name1" "val1") ("name2" "val2") ....)の形式で与えます。 |
述語名/引数 | (cgi_read_multipart *array *OE *NE *l) |
要約 | MIME multi-partからファイルやデータを抽出します。 |
互換性 | Win/Unix |
引数 | *array [in] 8ビットキャラクター配列 *OE [in] *arrayのエンコーディング *NE [in] 変換後のエンコーディング *l [out] 抽出された結果のリスト |
成功/失敗 | true 抽出に成功し、*lに関するマッチングに成功した。 false 上記以外 |
解説 | 結果のリストの要素は("file" データ名 ファイル名 ファイルの内容)または("normal" データ名
データの内容)です。 *OEにはフォームを含むHTML文書のエンコーディングを指定します。 *NEには出力の変数の内容のエンコーディングを指定します。ETIの内部エンコーディングを指定するには"UTF-16LE"を与えます。 |
以下の例は、テキストとファイル(jpg)を入力する例です。取得した値を表示し、受け取ったファイルをettest.jpgという名前で保存します。
例:
入力フォーム用HTML文書:input.html(UTF-8)
<html>
<head>
<title>test cgi_read_multipart</title>
</head>
<body>
<FORM ENCTYPE="multipart/form-data" ACTION="test.eti" METHOD="POST">
Author: <INPUT TYPE="TEXT" NAME="author"><BR>
Path: <INPUT TYPE="FILE" NAME="fname"SIZE=48><BR>
<INPUT TYPE="SUBMIT" VALUE="Upload">
</FORM>
</body>
</html>
テストプログラムtest.eti
#!c:/eti/eti.exe
?-(printf "Content-type: text/html\n\n"),
(printf "<html><head><title>test1</title></head><body><p>").
?-(getenv "CONTENT_LENGTH" *l),(atoi *l *length),(stdin_b *length *array),
(cgi_read_multipart *array "UTF-8" "UTF-16LE" *re),
(= *re (("normal" *valname1 *text)("file" *valname2 *filename *data))),
(arrayToString *text 0 *text2),
(printf "<p>valname:%s<br/>\nvalue:%s</p>\n<p>valname:%s<br/>\nfile:%s</p>\n"(*valname1
*text2 *valname2 *filename)),
(fopen "ettest.jpg" "wb" *fd),(fwrite_b *fd *data),(fclose *fd).
?-(printf "</p></body></html>").
?-q.