2012-04-22 106 views
3

聲明:我知道,在99%的情況下,你不應該「串行化」串聯字符串中的數據。什麼是String.Split的最佳特徵?

什麼燒焦你們在使用衆所周知的情況:

string str = userId +"-"+ userName; 

在大多數情況下,我已經回落到| (管道),但在某些情況下,用戶甚至可以輸入。那麼「non」字符如☼(ALT + 9999)怎麼樣?

+1

你能解釋一下你爲什麼要這樣做?它聞起來像一個非常糟糕的主意。 – JohnFx 2012-04-22 06:55:18

+0

假設我想加密一些數據並通過網絡將其通過HTTP發送到移動應用程序。我沒有時間去建立看中序列化框架,並希望儘快啓動和運行...即我做Context.Write器(Encrypt(「參數1 |參數2 |參數3」)) – kape123 2012-04-22 07:00:21

+0

以下是使用一些指令輪子:http://www.c-sharpcorner.com/UploadFile/bipinjoshi/serializingObjectsinCS11102005234746PM/serializingObjectsinCS。aspx抱歉,沒時間聊天我正要睡覺。 – JohnFx 2012-04-22 07:08:44

回答

6

這取決於太多的因素給出具體的答案。

首先,爲什麼你這樣做?如果您覺得需要通過以這種方式組合它們來存儲userIduserName,則考慮替代方法,例如, CSV風格的報價或類似。其次,在正常情況下,只能使用不屬於字符串部分的分隔符。如果userId只是一個數字,那麼「 - 」沒問題......但如果數字可能是負數呢?

第三,這取決於你打算如何處理字符串。如果僅僅是記錄或者調試器或者其他形式的人類消費,那麼你可以放鬆一下,然後選擇一個看起來合適的分隔符。如果您打算存儲這樣的數據,使用一個分隔符比確保你能正確提取數據以後,無論userIduserName值的。如果你可以避開它,例如使用\0。如果任一值來自不可信來源(即Internet),則確保分隔符不能用作任何字符串中的字符。一般情況下,您可以限制每個字符包含的字符,例如userId的數字和userName的字母,數字和一些標點符號。

+0

Hmph ...是的\ 0很好。我並不是在尋找這樣做的完全萬無一失的方式(從提及 - 和|這是顯而易見的),只是很好奇人們推薦的建議以及與此相關的竅門。 – kape123 2012-04-22 07:10:14

4

如果是用於數據存儲和檢索,也沒有辦法保證用戶不會找到一種方式來注入你的分隔符到字符串。安全的事情是預處理輸入莫名其妙:

  • -是特殊字符
  • 如果-在輸入時遇到喜歡的東西-0取代它。
  • 使用--作爲定界符

所以userid = "alpha-dog"userName = "papa--0bear"將被轉換爲

alpha-0dog--papa-0-00bear 

重要的是,你的方式要完全撤銷的,且用戶不應該無論他們輸入什麼,都能打破它。

本質上講,這是消毒的一個非常原始的版本。

相關問題