お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"Webブラウザで表示する文字列に変換する"





タイトル:Webブラウザで表示する文字列に変換する

 テキストをそのままHTMLに挿入して表示すると、

    '<' がタグの一部と認識さる、
    改行が入らない、
    スペースが詰まってしまう、

ために正しく表示できないことがあります。
 それらの文字を置換する(だけ)サンプルコードです。

 1文字ずつコピーしたのでは処理が遅くなるので、変換対象の
文字が出てくるまでを一括コピーしています。

function GetHTMLString(Src: string): string;
var
  I, CopyStart: Integer;

  // 文字列を追加する
  procedure AddString(Src: string);
  begin
    Result := Result + Src;
  end;

  // 現在点の直前までの未コピー領域をコピーする
  procedure AddLastString;//: string;
  begin
    if I > CopyStart then
    AddString(Copy(Src, CopyStart, I - CopyStart));
  end;

begin

  Result := '';

  CopyStart := 1;
  I := 1;
  while I <= Length(Src) do
  begin

    case Src[I] of
    '"':begin
        AddLastString;
        AddString('&quot;');
        CopyStart := I + 1;
      end;
    '<':begin
        AddLastString;
        AddString('&lt;');
        CopyStart := I + 1;
      end;
    '>':begin
        AddLastString;
        AddString('&gt;');
        CopyStart := I + 1;
      end;
    '&':begin
        AddLastString;
        AddString('&amp;');
        CopyStart := I + 1;
      end;
    ' ':
      begin
        AddLastString;
        AddString('&nbsp;');
        CopyStart := I + 1;
      end;
    #13:begin // 改行
        AddLastString;
        AddString('<BR>' + #13 + #10);
        if Src[I + 1] = #10 then Inc(I);
        CopyStart := I + 1;
      end;
    #128..#255:begin
        // 2バイト文字をスキップ
        Inc(I);
      end;
    #0:begin
        // 終了
        // バグが無ければ、この部分は通過しないはず
        break;
      end;
    end;
    Inc(I);
  end;
  AddLastString;

end;


使用例は、

procedure TForm1.Button1Click(Sender: TObject);
var
  Strings: TStrings;
  S: string;
begin
  Strings := TStringList.Create;
  Strings.LoadFromFile('ReadMe.txt');

  // タグに間違えられる文字列を置換する
  S := GetHTMLString(Strings.Text);

  // HTMLの体裁を整える
  Strings.Clear;
  Strings.Add('<HTML><HEAD></HEAD><BODY>');
  Strings.Add(S);
  Strings.Add('</BODY></HTML>');

  Strings.SaveToFile('ReadMe.html');
  Strings.Free;

//  WebBrowser1.Navigate('ReadMe.html');
end;

2001/02/13、河邦 正(GCC02240@nifty.com)
(http://member.nifty.ne.jp/kht0000/、NIFTY外へ私作Componentの
公開用)
 


Original document by 河邦 正         氏 ID:(GCC02240)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum