在 Delphi 中,QuotedStr 是一个非常常用的函数,它的作用是将一个字符串转化为带引号的形式,并且对其中的单引号(')进行转义,以确保字符串的安全性。通常用于生成 SQL 查询字符串,或者在需要将字符串包裹在引号中的场合。

🧐 1. QuotedStr 函数概述

QuotedStr 是 Delphi 中 SysUtils 单元提供的一个函数,它的作用是将一个字符串转换为用单引号包围的形式,并且处理字符串中的单引号字符。

函数声明:

function QuotedStr(const S: string): string;

🔍 2. 使用场景

  1. 生成 SQL 查询语句: 在 SQL 查询中,字符串常常需要被单引号包围。使用 QuotedStr 可以避免手动添加引号。
  2. JSON、XML 处理: 在处理一些文件格式时,字符串常常需要用引号包围并转义其中的特殊字符。
  3. 字符串格式化: 需要在某些环境下,像 C/C++ 等语言中的字符串常常需要加上引号。

🛠️ 3. QuotedStr 使用示例

示例 1:基本使用

uses
  SysUtils;

var
  originalStr, quotedStr: string;
begin
  originalStr := 'Hello World';
  quotedStr := QuotedStr(originalStr);
  Writeln(quotedStr);  // 输出:'Hello World'
end.

在这个例子中,QuotedStr 将 'Hello World' 包裹在单引号中,返回的字符串是:'Hello World'

示例 2:处理字符串中的单引号

如果原始字符串包含单引号,QuotedStr 会自动对这些单引号进行转义,以避免语法错误。

uses
  SysUtils;

var
  originalStr, quotedStr: string;
begin
  originalStr := "It's a great day";
  quotedStr := QuotedStr(originalStr);
  Writeln(quotedStr);  // 输出:'It''s a great day'
end.

在这个例子中,原始字符串 "It's a great day" 包含了一个单引号,QuotedStr 会将其转义成 ''(两个单引号)以符合 SQL 或其他格式的要求,输出结果是:'It''s a great day'

示例 3:用于 SQL 查询

在构造 SQL 查询语句时,可以使用 QuotedStr 来确保字符串的格式正确。

uses
  SysUtils;

var
  userInput, query: string;
begin
  userInput := 'O\'Reilly';  // 用户输入含有单引号的字符串
  query := 'SELECT * FROM users WHERE name = ' + QuotedStr(userInput);
  Writeln(query);  // 输出:SELECT * FROM users WHERE name = 'O''Reilly'
end.

在这个例子中,userInput 中的单引号被转义为 '',从而生成正确的 SQL 查询语句:SELECT * FROM users WHERE name = 'O''Reilly'

示例 4:与格式化字符串一起使用

有时,QuotedStr 会与格式化函数一起使用,例如 Format 或 Concat,以便在构建更复杂的字符串时使用。

uses
  SysUtils;

var
  str1, str2, formattedStr: string;
begin
  str1 := 'Delphi';
  str2 := 'Programmer';
  formattedStr := Format('Name: %s, Occupation: %s', [QuotedStr(str1), QuotedStr(str2)]);
  Writeln(formattedStr);  // 输出:Name: 'Delphi', Occupation: 'Programmer'
end.

📝 4. 总结

  • QuotedStr 通过为字符串添加单引号和转义其中的单引号字符,使得字符串能够在如 SQL 等需要转义字符的场合中安全使用。
  • 它简化了包含特殊字符(如单引号)的字符串处理,避免了手动转义字符的繁琐和错误。
  • 常用于字符串拼接、数据库查询、JSON 处理等场景。

通过 QuotedStr,可以有效地避免因字符串中的特殊字符引发的错误或安全漏洞,特别是在生成 SQL 查询时。

如果你有其他 Delphi 相关的疑问,欢迎随时提问!