ASP里处理字符串空格,除空最直接的除空方法是`Replace`函数。但用的除空时候有个坑——它只替换你指定的那一种空格。我见过不少新手写`Replace(str,除空 " ", "")`,结果数据库里存的除空全角空格纹丝不动,页面照样多出一截空白。除空这问题在用户提交表单时特别常见,除空尤其从Word或网页编辑器复制过来的除空文本,混着全角空格、除空半角空格、除空甚至不间断空格(` `),除空光靠一次替换根本清不干净。除空
我自己的除空做法是写个自定义函数,把几种常见的除空空格都列进去循环替换。全角空格对应`chr(160)`,除空半角空格是`chr(32)`,还有制表符`chr(9)`。别小看制表符,用户按Tab键缩进的内容粘贴进来,它会悄悄藏在字符串中间,显示时看不出问题,但存进数据库再读出来,字段对不齐,排序也乱套。代码写起来不复杂,核心就是嵌套几个`Replace`调用,比如:
Function TrimAll(str) TrimAll = Replace(str, chr(32), "") TrimAll = Replace(TrimAll, chr(160), "") TrimAll = Replace(TrimAll, chr(9), "") TrimAll = Replace(TrimAll, chr(13), "") TrimAll = Replace(TrimAll, chr(10), "") End Function 这段代码会把回车换行也去掉。但得想清楚——如果你处理的是textarea里的多行文本,去掉换行会让段落挤成一坨。我通常只去掉首尾的空格和换行,中间保留原样。ASP自带的`Trim`函数只处理半角空格,对全角无能为力,所以自己写个`TrimAll`更靠谱。
另一个容易忽略的地方是数据库字段本身。如果字段类型是`char`而不是`varchar`,存储时会自动补满空格,读出来长度固定,尾部全是空格。这时候在ASP端再怎么替换也没用,得在SQL查询里用`RTRIM`处理。我遇到过几次这种问题,排查半天才发现是表结构设计导致的,不是代码逻辑的锅。
性能方面也别太担心。`Replace`函数在字符串不长时效率足够,但如果你在循环里对大量记录做处理,比如一次性清洗几万条历史数据,那就得注意了。我试过用一个循环逐条调`TrimAll`,跑了快一分钟才完。后来改成用`RegExp`对象配合正则表达式一次性替换,速度提升明显,但正则写起来容易出错,得先在小样本上验证。
最后提个细节:处理完空格后最好顺手验证一下结果。比如在页面上输出处理前后的字符串长度,或者用`Len`函数对比一下。有时候你以为空格清掉了,其实还有零宽空格(`chr(8203)`)这种隐形字符残留,肉眼根本看不出来,只有对比长度才能发现。这种字符通常来自网页编辑器自动插入的格式标记,处理起来比较麻烦,得用`Replace(str, chr(8203), "")`单独对付。
写ASP这么多年,空格处理看着简单,实际坑不少。但搞明白原理后,也就那么回事——无非是搞清楚你要处理的是哪种空格,然后对症下药。
