問一個特殊字符的問題,在線等

时间:2022-06-20 15:40:18
數據庫一條記錄其中一個字段的值,是幾個中文字,用asp輸出正常,
用javascript輸出出錯,錯誤提示:無法判斷字串常數的結尾。
經查是特殊字符的問題,因為將讀出來的幾個中文字進行URLEncode編碼時,
發現多出了“%09%09%0D%0A”,就是這幾個東西讓javascript出錯的,因為讀其它記錄沒有“%09%09%0D%0A”是正常的並沒有出錯,

請問這些“%09%09%0D%0A”是什麼符號?因為我用unescape還原什麼都看不到,怎麼解決,或怎麼替換掉?謝謝

11 个解决方案

#1


0x09 0x0d分别为回车符和换行符,若用javascript中,应该将这两个字符转为一个"\n"就可以.

#2


“%09%09 二個 TAB
%0D%0A 回車換行

#3


具體查看 ASCII 表

#4


<%
Function URLDecode(enStr)
'字符串解码函数,针对server.urlEncode进行的编码
dim deStr
dim c,i,v
deStr=""
for i=1 to len(enStr)
c=Mid(enStr,i,1)
if c="%" then
v=eval("&h"+Mid(enStr,i+1,2))
if v<128 then
deStr=deStr&chr(v)
i=i+2
else
if isValidHex(mid(enstr,i,3)) then
if isValidHex(mid(enstr,i+3,3)) then
v=eval("&h"+Mid(enStr,i+1,2)+Mid(enStr,i+4,2))
deStr=deStr&chr(v)
i=i+5
else
v=eval("&h"+Mid(enStr,i+1,2)+cstr(hex(asc(Mid(enStr,i+3,1)))))
deStr=deStr&chr(v)
i=i+3 
end if 
else 
destr=destr&c
end if
end if
else
if c="+" then
deStr=deStr&" "
else
deStr=deStr&c
end if
end if
next
URLDecode=deStr
end function

function isValidHex(str)
isValidHex=true
str=ucase(str)
if len(str)<>3 then isValidHex=false:exit function
if left(str,1)<>"%" then isValidHex=false:exit function
c=mid(str,2,1)
if not (((c>="0") and (c<="9")) or ((c>="A") and (c<="Z"))) then isValidHex=false:exit function
c=mid(str,3,1)
if not (((c>="0") and (c<="9")) or ((c>="A") and (c<="Z"))) then isValidHex=false:exit function
end function

response.write URLDecode("%09%09%0D%0A")
%>

好像是没有内容的

#5


回车符和换行符

相当于直接把你的程序断开两行

"AAA%09%0ABBB"其实解析为
"AAA
BBB"
肯定编译不过去

可以考虑先在服务器端进行替换,然后再处理

#6


说错一点儿

09是 Tab 
0A是 回车
0D是 换行

#7


謝謝。我再看看,奇怪,輸入資料的人怎麼可以輸入tab的呢?tab是切換焦點的啊,還有入輸框是input單行的怎麼會輸入換行的呢?

#8


用asp读出来后,用下面的语句进行替换一下:

str = replace(str, vbCrLf, "\n")
然后在用javascript脚本中显示.

#9


mark

#10


有轉義符呀, \t ,直接使用 JS賦值就可以呀.

#11


謝謝大家,我將CHR(10)和CHR(13)替換成空了,

#1


0x09 0x0d分别为回车符和换行符,若用javascript中,应该将这两个字符转为一个"\n"就可以.

#2


“%09%09 二個 TAB
%0D%0A 回車換行

#3


具體查看 ASCII 表

#4


<%
Function URLDecode(enStr)
'字符串解码函数,针对server.urlEncode进行的编码
dim deStr
dim c,i,v
deStr=""
for i=1 to len(enStr)
c=Mid(enStr,i,1)
if c="%" then
v=eval("&h"+Mid(enStr,i+1,2))
if v<128 then
deStr=deStr&chr(v)
i=i+2
else
if isValidHex(mid(enstr,i,3)) then
if isValidHex(mid(enstr,i+3,3)) then
v=eval("&h"+Mid(enStr,i+1,2)+Mid(enStr,i+4,2))
deStr=deStr&chr(v)
i=i+5
else
v=eval("&h"+Mid(enStr,i+1,2)+cstr(hex(asc(Mid(enStr,i+3,1)))))
deStr=deStr&chr(v)
i=i+3 
end if 
else 
destr=destr&c
end if
end if
else
if c="+" then
deStr=deStr&" "
else
deStr=deStr&c
end if
end if
next
URLDecode=deStr
end function

function isValidHex(str)
isValidHex=true
str=ucase(str)
if len(str)<>3 then isValidHex=false:exit function
if left(str,1)<>"%" then isValidHex=false:exit function
c=mid(str,2,1)
if not (((c>="0") and (c<="9")) or ((c>="A") and (c<="Z"))) then isValidHex=false:exit function
c=mid(str,3,1)
if not (((c>="0") and (c<="9")) or ((c>="A") and (c<="Z"))) then isValidHex=false:exit function
end function

response.write URLDecode("%09%09%0D%0A")
%>

好像是没有内容的

#5


回车符和换行符

相当于直接把你的程序断开两行

"AAA%09%0ABBB"其实解析为
"AAA
BBB"
肯定编译不过去

可以考虑先在服务器端进行替换,然后再处理

#6


说错一点儿

09是 Tab 
0A是 回车
0D是 换行

#7


謝謝。我再看看,奇怪,輸入資料的人怎麼可以輸入tab的呢?tab是切換焦點的啊,還有入輸框是input單行的怎麼會輸入換行的呢?

#8


用asp读出来后,用下面的语句进行替换一下:

str = replace(str, vbCrLf, "\n")
然后在用javascript脚本中显示.

#9


mark

#10


有轉義符呀, \t ,直接使用 JS賦值就可以呀.

#11


謝謝大家,我將CHR(10)和CHR(13)替換成空了,