是否有Delphi标准函数用于转义HTML?

前端之家收集整理的这篇文章主要介绍了是否有Delphi标准函数用于转义HTML?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个报告,应该采取网格控制和生成HTML输出。网格中的一列可以显示多个值中的任何一个,或“任何”。当它输出到HTML时,当然最终会变成空白。

我可以写一些例程来使用StringReplace把它变成& lt; Any& gt;所以它会正确显示这个特定的情况,但是我认为RTL中可能有一个已经被测试了,它是正确的。有人知道我能找到吗?

解决方法

我有99%的确定这样的功能不存在于RTL(截至德尔福2009)。然而,当然,写这样的功能是微不足道的。

更新

HTTPUtil.HTMLEscape是您正在寻找的:

function HTMLEscape(const Str: string): string;

我不敢在这里发布代码(侵犯版权,大概),但是例程很简单。它将“<”,“>”,“&”和“”“编码到& lt;,& amp; amp; amp& amp; #160 ..#255到十进制代码,例如&#92;

如果文件是UTF-8,则后一步是不必要的,也是不合逻辑的,因为较高的特殊字符(例如∮)原样保留,而较低的特殊字符(例如×)被编码。

更新2

为了回应Stijn Sanders的答案,我做了一个简单的性能测试。

program Project1;

{$APPTYPE CONSOLE}

uses
  Windows,SysUtils;

var
  t1,t2,t3,t4: Int64;
  i: Integer;
  str: string;
const
  N = 100000;


function HTMLEncode(const Data: string): string;
var
  i: Integer;
begin

  result := '';
  for i := 1 to length(Data) do
    case Data[i] of
      '<': result := result + '&lt;';
      '>': result := result + '&gt;';
      '&': result := result + '&amp;';
      '"': result := result + '&quot;';
    else
      result := result + Data[i];
    end;

end;

function HTMLEncode2(Data: string):string;
begin
  Result:=
    StringReplace(
    StringReplace(
    StringReplace(
    StringReplace(
      Data,'&','&amp;',[rfReplaceAll]),'<','&lt;','>','&gt;','"','&quot;',[rfReplaceAll]);
end;

begin

  QueryPerformanceCounter(t1);
  for i := 0 to N - 1 do
    str := HTMLEncode('Testing. Is 3*4<3+4? Do you like "A & B"');
  QueryPerformanceCounter(t2);

  QueryPerformanceCounter(t3);
  for i := 0 to N - 1 do
    str := HTMLEncode2('Testing. Is 3*4<3+4? Do you like "A & B"');
  QueryPerformanceCounter(t4);

  Writeln(IntToStr(t2-t1));
  Writeln(IntToStr(t4-t3));

  Readln;


end.

输出

532031
801969
原文链接:https://www.f2er.com/delphi/103494.html

猜你在找的Delphi相关文章