4

免責事項: 99% の場合、連結された文字列内のデータを「シリアル化」してはならないことを私は知っています。

よく知られている状況で使用する文字:

string str = userId +"-"+ userName;

ほとんどの場合、私は | に戻りました。(パイプ)しかし、場合によってはユーザーがそれを入力することもあります。☼ (ALT+9999) のような「入力できない」文字はどうですか?

4

2 に答える 2

8

それは、具体的な答えを出すにはあまりにも多くの要因に依存します.

まず、なぜこれ行うのですか?userIdandをこのように組み合わせて保存する必要がある場合はuserName、CSV スタイルの引用などの代替アプローチを検討してください。

次に、通常の状況では、文字列の一部ではない区切り文字のみを使用する必要があります。userId が単なる数字の場合、「-」は問題ありません...しかし、数字が負になる可能性がある場合はどうなりますか?

第三に、文字列をどうするかによって異なります。単にロギングやデバッガー、またはその他の形式の人間が使用するためのものである場合は、それについて少しリラックスして、適切に見える区切り文字を選択するだけでかまいません。userIdこのようなデータを保存する場合は、やの値に関係なく、後でデータを適切に抽出できるように区切り記号を使用してくださいuserName。それを回避できる場合は\0、たとえばを使用します。いずれかの値が信頼できないソース (つまり、インターネット) からのものである場合は、区切り文字がどちらの文字列でも文字として使用できないことを確認してください。一般に、それぞれに含まれる文字を制限します。たとえば、 と の数字userId、文字、数字、および の一部の句読点などですuserName

于 2012-04-22T06:53:12.733 に答える
6

データの保存と取得のための場合、ユーザーが区切り文字を文字列に挿入する方法を見つけられないことを保証する方法はありません。安全に行うには、何らかの方法で入力を前処理します。

  • -特殊文字にしましょう
  • 入力でa が検出された場合-は、 のようなものに置き換えます-0
  • --区切り文字として使用

だからuserid = "alpha-dog"userName = "papa--0bear"に翻訳されます

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

重要なことは、スキームは完全に元に戻すことができる必要があり、ユーザーが何を入力してもそれを破ることができないようにすることです。

基本的に、これはサニタイズの非常に原始的なバージョンです。

于 2012-04-22T07:00:39.273 に答える