假設我們有個網頁表單, 表單有 2 個欄位, 1 個是 id, 1 個是 name.
在 Delphi 7 的做法: 放 1 個 idHTTP, 1 個 Button, 然後在 Button.OnClick Event 寫下 ----
var cPost: TStrings; begin cPost := TStringList.Create; cPost.Add('id=123456789'); cPost.Add('name=老灰鴨'); idHTTP1.Post('http://網址/網頁.php',cPost); cPost.Free; end;
就這麼簡單, 不過這只適用 post 到 BIG5 網頁; 如果要將表單內容 post 到 utf-8 網頁, 則上述做法就得略做調整了, 不然會發生類似下面的錯誤:
invalid byte sequence for encoding "UTF8": 0xbc
HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding"
要 post 的網頁為 utf-8 時, 要使用 UTF8Encode 函式做字的編碼轉換.
假設我們使用了 TADOQuery, 名為 query, 所連結的資料表有 2 個欄位, 1 個是 id, 1 個是 name, 其中 name 欄位有些姓名為罕用字, 則在 TDataSet(包括底下繼承的 TADOTable, TADOQuery...) 的 Fields Editor 設定的欄位類別需設為 WideString, 而在取欄位值時要用 query.FieldByName('欄位名').AsVariant 做型別轉換, 或直接以 query['欄位名'] 的方式讓 Delphi 自動幫您判別並做型別轉換, 下面的例子就是用 query['欄位名'] 的方式.
var cPost: TStrings; begin cPost := TStringList.Create; cPost.Add('id='+UTF8Encode(query['id'])); cPost.Add('name='+UTF8Encode(query['name'])); http.Post('http://網址/網頁.php', cPost); cPost.Free; end;
至於 Delphi 2009 後的版本, 由於 Delphi 已全面支援 unicode, 所以直接以第一種方法 post 即可.
沒有留言:
張貼留言