加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 10:17:49 所属栏目:大数据 来源:网络整理
导读:我有一个报告,应该采取网格控制和生成HTML输出。网格中的一列可以显示多个值中的任何一个,或“任何”。当它输出到HTML时,当然最终会变成空白。 我可以写一些例程来使用StringReplace把它变成 lt; Any gt;所以它会正确显示这个特定的情况,但是我认为RTL中
我有一个报告,应该采取网格控制和生成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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读