I just added this Prepare method to my database API.

class function XML.IsInvalid(var Value:Byte):boolean;
begin
Result:=(Value<9) or (Value=11) or (Value=12) or ( (Value>13) and (Value<32));
end;

class function  XML.Prepare(var sInput:string; Refactor:TStream):string;
var
  bChar:byte;
  iLcv:Int64;
  iLen:Int64;
  sReplace:string;
begin
  Refactor.Size:=0;
  for iLcv:=1 to System.Length(sInput) do begin
    bChar:=Byte(sInput[iLcv]);
    if IsInvalid(bChar) then begin
      sReplace:=Concat('&#',IntToStr(bChar),';');
      iLen:=System.Length(sReplace);
      Refactor.Write(sReplace[1],iLen);
    end else
      Refactor.Write(bChar,1);
  end;
  System.SetLength(Result,Refactor.Size);
  if Refactor.Size>0 then
    Refactor.Read(Result[1],Refactor.Size);
  Refactor.Size:=0;
end;

The question is, what is going to happen when the encoding is UTF8 or UTF16? Will this code allow bytes to go by without messing them all up?


--
Andrew Brunner

Aurawin LLC
512.574.6298
http://aurawin.com/

Aurawin is a great new way to store, share, and enjoy your
photos, videos, music and more.

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to