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