Postパラメータが文字化けしてしまう


kanpachi  2011-10-14 20:12:57  No: 41019

Delphi6で作成したCGIをUnicode文字に対応させるために
Delphi2010で作り直そうとしています。

問題点としてPostパラメータを受け取る際に文字化けしてしまいます。
Getパラメータはうまく受け取れたのですが・・・

Postパラメータを文字化けしないで受け取る方法のご教授をお願いします。

procedure GetParam(var ParamList: TStringList);
var
  Param: string;
  EPos: Integer;
  ContentLength: Integer;
  readn: DWORD;
  TmpParam: string;
  CumulativeRead: DWORD;
  Loop: Integer;
begin
  try
    GetEnvironmentVariable(PChar('REQUEST_METHOD'), FENV, Sizeof(FENV));
    Param := '';
    if FENV = 'GET' then begin
      FENV := '';
      GetEnvironmentVariable(PChar('QUERY_STRING'), FENV, Sizeof(FENV));
      Param := FENV;
      FENV := '';
    end
    else if FENV = 'POST' then begin
      FENV := '';
      GetEnvironmentVariable(PChar('CONTENT_LENGTH'), FENV, Sizeof(FENV));
      ContentLength := StrToInt(FENV);
      FENV := '';
      SetLength(Param, ContentLength);
      if ContentLength > 0 then begin
        ReadFile(STD_INPUT_HANDLE, Param[1], ContentLength, readn, nil);
      end;
      CumulativeRead := readn;
      Loop := 0;
    
      while CumulativeRead < ContentLength do begin
        ReadFile(STD_INPUT_HANDLE,
                 Param[CumulativeRead + 1],
                 ContentLength - CumulativeRead,
                 readn,
                 nil);
        CumulativeRead := CumulativeRead + readn;
        Inc(Loop);
        if Loop >= 1000 then begin
          Break;
        end;
      end;
    end;
    if Param <> '' then begin
      while Pos('&', Param) > 0 do begin
          EPos := Pos('&', Param);
          TmpParam := Copy(Param, 1, EPos - 1);
          Utf8Decode(HttpDecode(TmpParam));
          ParamList.Add(TmpParam);
          Param := Copy(Param, EPos + 1 , Length(Param) - EPos);
      end;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加