我用的是中文NT4+IIS3,在传弟中文时,总是在后面加上一些莫名其妙的英文或其它字符。我曾在同样的系统上运行过同样的程序,正常。
你 使 用 的 WEB Server 是 什 么 版 本 的 ? 那 么 ASP 的 版 本 呢 ? 如 果 你 使 用 的 是 Microsoft 的 Personal Web Server ( 安 装 于 PWIN95 ) 或 是 Internat Information Server 3.0 ( 安 装 于 PWINNT 4.0 + SP3) ,安 装 了 Visual Studio 97 内 Visual InterDev 1.0 附 带 的 ASP,那 么 你 可 能 就 会 遇 上 这 样 的 问 题 : 理 论 上 Request("Chinese") 应 该 等 于 “中国人” , 可 时 你 得 到 的 结 果 可 能 是 这 样 的 “中国人djk” , 后 面 跟 了 3 个 毫 不 相 干 的 字 母 。 这 样 的 结 果 当 然 不 是 你 要 的 。
让 飞 鸟 来 给 你 分 析 一 下 原 因 吧 。 如 果 你 熟 悉 VB5.0 , 那 么 你 一 定 知 道 在 中 文 系 统 下 len("中国人") 等 于 3 , VB5.0 将 中 文 字 符 当 作 Unicode 。 AscW("中") 的 值 就 是 “中” 的 Unicode 码 ( 可 能 为 负 数 , 再 + 65536 变 成 正 数 即 是 ) 。 ASP 里 的 VB Script 也 这 么 处 理 。 那 么 多 余 的 乱 码 是 这 么 出 现 的 呢 ? 浏 览 器 会 将 中 文 编 成 2 个 字 节 再 提 交 到 WEB 服 务 器 , 这 样 服 务 器 得 到 的 字 符 长 度 便 是 6 , 但 是 实 际 上 “中国人” 的 长 度 是 3 , 乱 码 便 来 充 数 。
幸 运 的 是 飞 鸟 现 在 安 装 了 Windows NT 4.0 Option Pack ( 西 文 版 ) , 它 里 面 带 的 IIS4.0 和 新 版 本 的 ASP 就 不 会 出 现 这 样 的 问 题 。
如 果 你 使 用 的 是 恐 龙 时 代 的 IIS3.0 或 PWS , 使 用 这 样 一 个 函 数 或 许 能 行 。
<%Function HTMLCharacter(ByVal str)
strHTML = ""
nLen = Len(str)
j = 0
i = 0
k = 1
Do While (i < nLen)
strC = Mid(str, k, 1)
If (Asc(strC) < 0) Or (Asc(strC) > 256) Then
j = j + 1
i = i + 1
End If
i = i + 1
k = k + 1
Loop
nLen = nLen - j
For i = 1 To nLen
strC = Mid(str, i, 1)
If Asc(strC) >= 128 Then
strHTML=strHTML+"&#"+CStr(Asc(strC))+";"
Else
strHTML = strHTML + strC
End If
Next
HTMLCharacter = strHTML
End Function
%>
调 用 方 法 : HTMLCharacter(Request("Chinese")) , 它 的 值 就 只 能 是 “中国人” , 请 不 要 用 于 非 Request 对 象 的 字 符 串 。
后 记 : 本 文 几 天 前 刊 出 后 , 网 友 wangql 发 来 MAIL 指 出 , Request 出 现 多 余 字 符 , 是 因 中 文 NT + 西 文 IIS3.0 , 如 果 使 用 西 文 NT + 西 文 IIS3.0 就 不 会 出 现 这 种 问 题 。 网 友 wangql 认 为 IIS4.0 也 是 西 文 NT + 西文 IIS4.0 的 好 , 飞 鸟 有 点 赞 同 XXX 的 观 点 , 但 是 没 法 换 掉 现 在 的 操 作 系 统 ( 需 要 RMB 的 支 持 , 如 果 不 是 D 版 的 话 ) , 所 以 没 法 尝 试 。 飞 鸟 一 直 使 用 中 文 的 NT , 对 西 文 NT 不 了 解 , 如 果 西 文 下 , len("中国人")=6 的 话 , 就 不 会 出 现 本 文 开 头 所 诉 的 情 况 了 。
posted on 2005-06-09 10:41
洪跃腾 阅读(230)
评论(0) 编辑 收藏