6

私の場合、JavaScript オブジェクトを C#.NET コード ビハインドから HTML マークアップに動的に分割しようとしています。データを取得したら、文字列を準備して文字列内にオブジェクトを作成し、それを HTML マークアップに吐き出します。

var fileUploadDic = { 'firstname': 'Jo''hn', 'lastname' : 'Macy' , 'country' : 'USA };

その後、ボタン クリックなどの他のアクションで、firstname をプルしようとしましたが、firstname プロパティの値が単一引用符を処理するためにエスケープされていないため、JavaScript エラーが発生します。コード バックエンドでオブジェクト文字列を準備している間にそれを行うこともできますが、代わりにクライアント側で何かを行うのが好きです。

var dv = $('#dv1')
dv.append(fileUploadDic.firstname);  //gives me error.
dv.append(fileUploadDic.lastname);
dv.append(fileUploadDic.country);

JavaScript で、オブジェクトから文字を取得する際に文字をエスケープする方法はありますか。

http://jsfiddle.net/uagFu/8/

4

4 に答える 4

7

クライアント側のソリューションを探していますが、これを行うための最も安定した信頼できる方法は、送信内容を保守的にするという堅牢性の原則に準拠する方法であり、サーバー側の JavaScriptSerializer を使用して C# をシリアル化することです。オブジェクトを JSON 文字列に変換します。

これらのライブラリは、まさにこれらの問題を解決し、API を使用する人々 (この場合はあなただけ) がデータを特別な方法で処理する必要をなくすように設計されています。

Employee oEmployee1 = 
   new Employee{Name="Pini",ID="111", Age="30"};

System.Web.Script.Serialization.JavaScriptSerializer oSerializer = 
     new System.Web.Script.Serialization.JavaScriptSerializer();
string sJSON = oSerializer.Serialize(oEmployee1);

次に、AJAX 要求から sJSON をクライアント側に戻し、他の JSON 文字列と同様に処理します。

詳細については、「 JavaScriptSerializer を使用して C# でオブジェクトを JSON に変換する」を参照してください。

于 2012-05-18T06:36:54.690 に答える
2

準備する文字列では、次を使用します。

"var fileUploadDic = { 'firstname': 'Jo\\'hn', 'lastname' : 'Macy' , 'country' : 'USA };"

クライアント側は次のようになります。

var fileUploadDic = { 'firstname': 'Jo\'hn', 'lastname' : 'Macy' , 'country' : 'USA };

クライアント側を置き換えたい場合''は を使用できますが[varstr].replace(/''/g,"\\'")、クライアント側では遅すぎると思います (送信された文字列の到着と解釈時にエラーが既にスローされています)。

于 2012-05-18T06:36:22.827 に答える
2

表示されているコードの最初の行は有効な JavaScript ではありません:

var fileUploadDic = { 'firstname': 'Jo''hn', 'lastname' : 'Macy' , 'country' : 'USA };

文字列'Jo''hn'にはそのように一重引用符を含めることができないためです。'Jo\'hn'またはのいずれかである必要があります"Jo'hn"。つまり、JS 文字列が一重引用符で囲まれている場合は、文字列内の各一重引用符文字をバックスラッシュでエスケープする必要がありますが、JS 文字列が二重引用符で囲まれている場合は、文字列内で自由に一重引用符を使用できます。2 つの一重引用符が連続して必要な場合は、'Jo\'\'hn'または"Jo''hn".

このクライアント側を修正するためにできることは何もありません。JavaScript が無効であるため実行されないからです。

サーバー側で修正する必要があります。最も簡単な方法は、おそらくバックスラッシュでエスケープすることです。これが C# 文字列にある場合は、バックスラッシュもエスケープして、ブラウザーへの実際の出力にバックスラッシュが含まれるようにする必要があることに注意してください。

"var fileUploadDic = { 'firstname': 'Jo\\'hn', 'lastname' : 'Macy' , 'country' : 'USA };"
于 2012-05-18T06:40:20.940 に答える
0

\' を使用できます...

jsfiddle

それはあなたが望むものですか?jsfiddle の定義で " 二重引用符を使用したため、実際には単一引用符を使用するだけでエスケープなしで動作するようです...しかし、今ではあなたが何を望んでいるのか理解できないと思います.

実際に 2 つの一重引用符を表示する場合は、"Jo\'\'hn" を使用できます...うまくいきました。

于 2012-05-18T06:31:39.567 に答える