我 99% 确定 RTL 中不存在这样的功能(截至 Delphi 2009)。当然 - 然而 - 编写这样一个函数是微不足道的。
更新
HTTPUtil.HTMLEscape 是您正在寻找的:
function HTMLEscape(const Str: string): string;
我不敢在这里发布代码(可能侵犯版权),但是套路很简单。它将 ""、"&" 和 """ 编码为 <、>、& 和 "。它还将字符 #92、#160..#255 替换为十进制代码,例如\。
如果文件是 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 + '<';
'>': result := result + '>';
'&': result := result + '&';
'"': result := result + '"';
else
result := result + Data[i];
end;
end;
function HTMLEncode2(Data: string):string;
begin
Result:=
StringReplace(
StringReplace(
StringReplace(
StringReplace(
Data,
'&','&',[rfReplaceAll]),
'<','<',[rfReplaceAll]),
'>','>',[rfReplaceAll]),
'"','"',[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