免责声明:我知道在99%的情况下,您不应该在串联字符串中“序列化”数据。
你们在众所周知的情况下使用了什么样的词:
string str = userId +"-"+ userName;
在大多数情况下,我已经回归| (管道)但是,在某些情况下,用户甚至会输入。怎么样的“非典型”字符如☼(ALT + 9999)?
答案 0 :(得分:6)
这取决于太多因素来给出具体答案。
首先,为什么 你这样做?如果您认为需要以这种方式组合userId
和userName
,请考虑其他方法,例如CSV样式的引用或类似。
其次,在正常情况下,只应使用不属于字符串一部分的分隔符。如果userId只是一个数字,那么“ - ”就可以了......但如果数字可能是负数呢?
第三,这取决于你打算用字符串做什么。如果它只是用于记录或调试或其他形式的人类消费,那么你可以放松一点,只需选择一个看起来合适的分隔符。如果您计划存储此类数据,请使用分隔符,以确保您可以在以后正确提取数据,无论userId
或userName
的值如何。如果您可以使用它,请使用\0
。如果任一值来自不受信任的源(即Internet),则确保分隔符不能用作任一字符串中的字符。通常,您会限制每个字符包含的字符 - 例如userId
的数字以及userName
的字母,数字和一些标点字符。
答案 1 :(得分:4)
如果是用于数据存储和检索,则无法保证用户无法找到将分隔符注入字符串的方法。安全的做法是以某种方式预处理输入:
-
成为特殊字符-
,请将其替换为-0
。--
作为分隔符因此userid = "alpha-dog"
和userName = "papa--0bear"
将被翻译为
alpha-0dog--papa-0-00bear
重要的是,您的方案需要完全撤销,并且无论用户输入什么内容,用户都不应该破坏它。
基本上这是一个非常原始的消毒版本。