delphi中的trim可以绕过吗?
is trim in delphi can be bypassed?
我正在尝试通过执行以下操作来检查字符串是否为空
if trim(somestring) = '' then
begin
//that an empty string
end
我正在我的客户端应用程序中执行此空检查,但我注意到有些客户端即使应用了此检查也会插入空字符串。
在我的 Linux 服务器端,那些空字符显示为正方形,当我复制这些字符时,我可以像下面的示例一样绕过空字符串检查
如果你复制这个空字符,检查将不会生效,我该如何避免?
由于 Trim 是一个非常简单的函数,它只忽略 ASCII 中小于或等于 dec 32 的字符 table
(样本来自 System.SysUtils.pas)
while S.Chars[L] <= ' ' do Dec(L);
因此,由于您的输入字符串使用了错误的编码,您可能看不到一些奇异的字符 (> ASCII 128)。
尝试使用:
StrToInt(Ord(SomeChar))
On every char that is not "trimmed" and remove them by hand or check Your encoding.
亲切的问候
您的代码运行正常,字符串不为空。空字符串是一个长度为零的字符串,它没有字符。你指的是空字符,但没有这样的东西。什么时候。您的系统显示一个小的空方块,表示所选字体没有该字符的字形。
让我们假设这些字符串无效。在那种情况下,您遇到的真正问题是您还没有完全理解字符串有效所需的属性。您编写的代码假定如果字符串至少包含一个序数值大于 32 的字符,则该字符串有效。显然,该测试不正确。您需要退后一步,制定出准确的有效性规则。只有这些你脑子清楚了,你才能正确地纠正你的编程和校验有效性。
另一方面,也许这些字符串是有效的,错误很简单,就是您在检查数据时错误地确定了其他情况。只有你自己知道,我们没有这方面的信息。
所有这些中的一个有用技术是检查字符串的序数值。遍历打印每个字符的序数值的字符。这使您可以看到真正存在的内容,而不会受到非打印字符、没有字形的字符、无效编码等的摆布。
我正在尝试通过执行以下操作来检查字符串是否为空
if trim(somestring) = '' then
begin
//that an empty string
end
我正在我的客户端应用程序中执行此空检查,但我注意到有些客户端即使应用了此检查也会插入空字符串。
在我的 Linux 服务器端,那些空字符显示为正方形,当我复制这些字符时,我可以像下面的示例一样绕过空字符串检查
如果你复制这个空字符,检查将不会生效,我该如何避免?
由于 Trim 是一个非常简单的函数,它只忽略 ASCII 中小于或等于 dec 32 的字符 table
(样本来自 System.SysUtils.pas)
while S.Chars[L] <= ' ' do Dec(L);
因此,由于您的输入字符串使用了错误的编码,您可能看不到一些奇异的字符 (> ASCII 128)。 尝试使用:
StrToInt(Ord(SomeChar)) On every char that is not "trimmed" and remove them by hand or check Your encoding.
亲切的问候
您的代码运行正常,字符串不为空。空字符串是一个长度为零的字符串,它没有字符。你指的是空字符,但没有这样的东西。什么时候。您的系统显示一个小的空方块,表示所选字体没有该字符的字形。
让我们假设这些字符串无效。在那种情况下,您遇到的真正问题是您还没有完全理解字符串有效所需的属性。您编写的代码假定如果字符串至少包含一个序数值大于 32 的字符,则该字符串有效。显然,该测试不正确。您需要退后一步,制定出准确的有效性规则。只有这些你脑子清楚了,你才能正确地纠正你的编程和校验有效性。
另一方面,也许这些字符串是有效的,错误很简单,就是您在检查数据时错误地确定了其他情况。只有你自己知道,我们没有这方面的信息。
所有这些中的一个有用技术是检查字符串的序数值。遍历打印每个字符的序数值的字符。这使您可以看到真正存在的内容,而不会受到非打印字符、没有字形的字符、无效编码等的摆布。