ASP Classic会话字符串正在取消连接

时间:2015-05-01 13:54:45

标签: string vbscript asp-classic

我在ASP classic中遇到过关于字符串行为的益智游戏。

代码从会话中提取一些值,然后尝试将它们用作字符串。

问题是该值以某种方式取消了字符串连接。

Dim testVar
testVar = session("test") <- this value is "aaa"
response.write "XXX - " & testVar & " - XXX"

该代码打印XXX - aaa

或者,如果我将testVar设置为某个字符串值la testVar="bbb",则字符串连接将按预期工作。

我在试图解决这个问题时发现了另外一件事......

StrComp(testVar, "aaa" ,0)返回1 StrComp(testVar, "aaa" ,1)返回0

那么为什么我的testVar会杀死连接的任何想法?

2 个答案:

答案 0 :(得分:3)

如果字符串末尾有空字符,那么StrComp行为就会出现;这也可以防止随后的连接。

您可以通过查看ascw(right(testVar, 1)) = 0

来验证这一点

砍掉它:testVar = left(testVar, len(testVar) - 1)

答案 1 :(得分:0)

可以看出
>> For Each s In Array("AB", "A" & Chrw(0))
>>     s = "XXX - " & s & " - XXX"
>>     WScript.Echo Len(s), s
>> Next
>>
14 XXX - AB - XXX
14 XXX - A

ChrW(0)既不取消也不阻止连接显示问题是由VBScript的IO方法的特性引起的。

如果你有一个地方/一段代码来获取或显示testVar(你可能应该),一个

s = Replace(s, ChrW(0), "WhateverMakesSenseInYourContext")

应该这样做。

证据:

>> For Each s In Array("AB", "A" & Chrw(0))
>>     s = "XXX - " & s & " - XXX"
>>     s = Replace(s, ChrW(0), "")
>>     WScript.Echo Len(s), s
>> Next
>>
14 XXX - AB - XXX
13 XXX - A - XXX

进一步深思:

Option Explicit

Const csFSpec = ".\29988189.data"

Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject")

Dim sData : sData    = "Danger" & ChrW(0) & " Will Robinson!"
Dim tsIO  : Set tsIO = goFS.CreateTextFile(csFSpec)
tsIO.WriteLine sData
tsIO.Close
sData = goFS.OpenTextFile(csFSpec).ReadLine()
WScript.Echo Len(sData), Replace(sData, ChrW(0), ",")

输出:

cscript 29988189.vbs
22 Danger, Will Robinson!