99% 这个问题的答案都在讨论如何净化输入。 在这种情况下我实际上不在乎 - 该页面由用户登录保护。
我想要的只是防止页面错误——我真的但真的不在乎用户输入什么。
因此,这个多行文本框理论上意味着用户将从 word 或其他具有编码的编辑器中剪切和粘贴。
因为一个简单的“<" or "[" the text can BLOW out the string entered by the user.
我当然是把一些值序列化成一个json字符串。
因此,我一直在这样做:
// transfer user comments box to Pinfo
// but, user might type in crap like "<" etc. - not allowed
JavaScript:
var MyUpLoadInfo = document.getElementById("MyUpLoadInfo") // client side json pinfo
var MyNotes = document.getElementById("txtNotes")
Pinfo = JSON.parse(MyUpLoadInfo.value)
// convert string to base64 - too much quotes and crap!!!
var tnote = cleanup(MyNotes.value)
Pinfo.txtNotes = window.btoa(tnote)
所以,我一直在使用btoa来转换字符串。
服务器端,然后我用这个简单地解码那个字符串:
Dim sConvert As New UTF8Encoding
cPinfo2.txtNotes =
sConvert.GetString((Convert.FromBase64String(cPinfo2.txtNotes)))
所以,这在大多数情况下都有效,因此我不关心用户是否输入“<", or a ":" or whatever. I just don't care!!
但是,由于上述原因,我仍然每隔几天就会收到此错误:
Error Description:
The input is not a valid Base-64 string as it contains a non-base 64 character,
more than two padding characters, or an illegal character among the padding
characters.
我什至很乐意转换为十六进制字符串。
任何人有一个简单的编码技巧我可以使用客户端,然后在服务器端解码以防止此类错误?
我的意思是,我认为一种解决方案是放入 html 编辑器,例如 ckeditor,或者使用我用来编辑网站上某些内容的 ajax html 编辑器。
无论如何,目标是防止这些错误,我不在乎是否由于简单的剪切 + 粘贴(从 word 说)这里包含一些控制字符和垃圾。
我可以并且会考虑删除任何不可打印的字符,或者甚至使用 + 调用消毒程序,但我希望将该文本框内容发送到服务器 - 通过任何可能的方式!
如前所述,文本框和序列化为 json 字符串的效果很好,但是当人们开始输入诸如此类的内容时
[only this or that--
然后打开但未关闭的“]”东西会破坏 json 字符串(并在服务器端反序列化)。
所以,客户端(js)
MyUpLoadInfo.value = JSON.stringify(Pinfo)
事实上,它确实是服务器端代码用 :
取消上面的软木塞 cPinfo2 = js.Deserialize(e.MyUpLoadInfo, GetType(ControlMIS.clsProjectInfo))
这经常会出错(文本框中的杂散 json 值(字符如 : 或 [ 等))。
无论如何,json 字符串的问题不是什么大问题,但是在这个时间点将用户输入的某种类型“转换”为十六进制字符串或任何东西就足够了。
所以,我似乎无法确定用户实际输入的内容,或者这只是他们文本中的一些简单的杂散控制字符 - 但正如我所说,我并不关心,我只是想要那个文本字符串- 不管它是什么。
关于如何将该字符串编码成可以使行程备份到服务器的东西的任何好主意?
甚至可以将字符串编码成十六进制字符串?