Функция конвертации текста HTML содержащего строки вида

Материал из DRKB


function PreDecode(s: string): string;

  function AddNumericChar(I: Integer): string;
  var
    W: WideChar;
    Buffer: array[0..10] of char;
  begin
    if I = 9 then
      Result := ' '
    else if I < ord(' ') then
      Result := '?'  { control char }
    else if (I < 256) then
      Result := Chr(I)
    else
    begin
      W := WideChar(I);
      SetString(Result, Buffer, WideCharToMultiByte(CP_ACP, 0,
        @W, 1, @Buffer, SizeOf(Buffer), nil, nil))
    end;
  end;

var
  val, i, ik: integer;
  sq: string;
begin
  for i := 1 to Length(s) do
  begin
    if ( (s[i]='&') and (s[i+1] ='#') ) then
    begin
      sq := Copy(s, i+2, Length(s));
      for ik := 1 to Length(sq) do
      begin
        if not (sq[ik] in ['0'..'9']) then
          break;
      end;
      if Copy(sq, 1, ik-1) <> '' then
        val := StrToInt(Copy(sq, 1, ik-1))
      else
        val := -1;
      if ((val <> -1) and (sq[ik] = ';')) then
      begin
        Result := Result + AddNumericChar(val);
        Delete(s, i, ik+1);
      end;
    end
    else
      Result := Result + s[i];
  end;
end;


Author: RAdmin
Source: Vingrad.ru http://forum.vingrad.ru
ID: 03543