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.