【发布时间】:2020-03-31 17:18:26
【问题描述】:
真是让人头疼....
我正在使用 VBScript 函数 REPLACE 将 MSSQL DB 中解密字段中的空格替换为“/”。
但是 REPLACE 函数并没有“看到”空格。
例如,如果我运行以下任何一项,其中“ITF_U_ClientName_Denc”字段的解密值为“Johnny Carson”:
REPLACE(ITF_U_Ledger.Fields("ITF_U_ClientName_Denc")," ","/")
REPLACE(ITF_U_Ledger.Fields("ITF_U_ClientName_Denc")," ","/")
REPLACE(ITF_U_Ledger.Fields("ITF_U_ClientName_Denc"),"Chr(160)","/")
REPLACE(CSTR(ITF_U_Ledger.Fields("ITF_U_ClientName_Denc"))," ","/")
REPLACE(ITF_U_Ledger.Fields("ITF_U_ClientName_Denc")," ","/",1,-1,1)
REPLACE(ITF_U_Ledger.Fields("ITF_U_ClientName_Denc")," ","/",1,-1,0)
返回值为“Johnny Carson”(空格不替换为/)
问题似乎只与空格有关,因为当我运行它时: REPLACE(ITF_U_Ledger.Fields("ITF_U_ClientName_Denc"),"a","/")
我得到“Johnny C/rson”。
此外,问题似乎完全在于解密值中的空格,因为当我运行这个时:
REPLACE("Johnny Carson"," ","/")
当然,返回值是“Johnny/Carson”。
我已经检查了正在写入页面源的内容,它只是“Johnny Carson”,没有编码或特殊字符。
我也尝试了 SPLIT 函数来查看它是否会“看到”空间,但它没有。
最后,感谢有用的评论,我尝试使用 VBS REGEX 搜索 \s。
Set regExp = New RegExp
regExp.IgnoreCase = True
regExp.Global = True
regExp.Pattern = "\s" 'Add here every character you don't consider as special character
strProcessed = regExp.Replace(ITF_U_Ledger.Fields("ITF_U_ClientName_Denc"), "?")
很遗憾,strProcessed 会返回“Johnny Carson”(即未检测到/删除空格)。
如果我替换 regExp.Pattern = "a",strProcessed 将返回 "Johnny C?rson"。
非常感谢您的帮助!!
【问题讨论】:
-
可能是编码问题,你试过正则表达式吗?示例:stackoverflow.com/questions/28853070/…
\s用于空格,\S用于非空格。 -
不是正则表达式,但我尝试使用此处解决方案中列出的每个空间变体替换:stackoverflow.com/questions/8515365/…。我将尝试使用 REGEX 方法来查看它“看到”解密的空间。
-
刚刚尝试使用 REGEX,但它也没有“看到”空间(请参阅问题更新)。
-
嗯。所以你是说
asc(mid(thatstring,7,1))返回 32(这是空间)? -
Response.Write(asc(mid("Johnny Carson",7,1))) 返回 32 但 Response.Write(asc(mid(ITF_U_Ledger.Fields("ITF_U_ClientName_Denc"),7,1 ))) 返回 15712 ( 无效字符)。尽管如此,REPLACE(ITF_U_Ledger.Fields("ITF_U_ClientName_Denc"),"","/",1,-1,1) 返回“Johnny Carson”(即没有找到 )。
标签: sql-server encryption replace vbscript spaces