Tôi chắc chắn 99% rằng chức năng như vậy không tồn tại trong RTL (như của Delphi 2009). Tất nhiên - tuy nhiên - nó là tầm thường để viết một hàm như vậy.
Cập nhật
HTTPUtil.HTMLEscape là những gì bạn đang tìm kiếm:
function HTMLEscape(const Str: string): string;
Tôi không dám công bố mã ở đây (vi phạm bản quyền, có lẽ), nhưng thói quen rất đơn giản. Nó mã hóa "<", ">", "&", và """ để <
, >
, &
và "
. Nó cũng thay thế ký tự # 92, # 160 .. # 255 vào thập phân mã, ví dụ như \
.
bước sau này là không cần thiết nếu các tập tin là UTF-8, và cũng vô lý, bởi vì ký tự đặc biệt cao hơn, chẳng hạn như ∮ được trái như họ đang có, trong khi ký tự đặc biệt thấp hơn, chẳng hạn như ×, được mã hóa.
Cập nhật 2
Để trả lời câu trả lời của Stijn Sanders, tôi đã thực hiện một bài kiểm tra hiệu năng đơn giản.
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.
Đầu ra là
532031
801969
Cách Delphi để thoát HTML ... Intraweb! ;-) – LachlanG