我需要某人能夠將一些文本放入頁面,然後將其發送到服務器,保存在數據庫中,否則將此文本放入JavaScript變量中。將用戶輸入放入生成的javascript的最佳方法是什麼?
基本上是這樣的:
Write("var myVar=\""+MyData+"\";");
什麼是逃離這個數據的最佳方式?有沒有什麼東西可以處理像'
和"
和新行? base64是我唯一的選擇嗎?
我的服務器端框架/語言ASP.Net/C#
我需要某人能夠將一些文本放入頁面,然後將其發送到服務器,保存在數據庫中,否則將此文本放入JavaScript變量中。將用戶輸入放入生成的javascript的最佳方法是什麼?
基本上是這樣的:
Write("var myVar=\""+MyData+"\";");
什麼是逃離這個數據的最佳方式?有沒有什麼東西可以處理像'
和"
和新行? base64是我唯一的選擇嗎?
我的服務器端框架/語言ASP.Net/C#
你應該使用WPL:
Write("var myVar=" + Encoder.JavaScriptEncode(MyData, true) + ";");
,如果你不想引用庫,你可以使用下面的函數(改編來自.Net源):
public static void QuoteString(this string value, StringBuilder b) {
if (String.IsNullOrEmpty(value))
return "";
var b = new StringBuilder();
int startIndex = 0;
int count = 0;
for (int i = 0; i < value.Length; i++) {
char c = value[i];
// Append the unhandled characters (that do not require special treament)
// to the string builder when special characters are detected.
if (c == '\r' || c == '\t' || c == '\"' || c == '\'' || c == '<' || c == '>' ||
c == '\\' || c == '\n' || c == '\b' || c == '\f' || c < ' ') {
if (b == null) {
b = new StringBuilder(value.Length + 5);
}
if (count > 0) {
b.Append(value, startIndex, count);
}
startIndex = i + 1;
count = 0;
}
switch (c) {
case '\r':
b.Append("\\r");
break;
case '\t':
b.Append("\\t");
break;
case '\"':
b.Append("\\\"");
break;
case '\\':
b.Append("\\\\");
break;
case '\n':
b.Append("\\n");
break;
case '\b':
b.Append("\\b");
break;
case '\f':
b.Append("\\f");
break;
case '\'':
case '>':
case '<':
AppendCharAsUnicode(b, c);
break;
default:
if (c < ' ') {
AppendCharAsUnicode(b, c);
} else {
count++;
}
break;
}
}
if (b == null) {
b.Append(value);
}
if (count > 0) {
b.Append(value, startIndex, count);
}
return b.ToString();
}
您的「改編」代碼非常粗糙。讓它工作需要一個'AppendAsUnicode'方法。我發現這雖然是更完整的(但看起來就像你的)https://kooboo.svn.codeplex.com/svn/trunk/Everest.Library/Json/JSONHelper.cs – Earlz 2010-06-14 16:57:14
看起來進一步它似乎是一個確切的撕裂與一些變量名稱略有不同。你是否將此代碼從上面的鏈接中刪除?我需要知道,因爲上面的許可證是GPL ..我也注意到你在這裏也使用它:http://stackoverflow.com/questions/2714546/access-variable-from-code-behind-via-jqery/2714563#2714563 – Earlz 2010-06-14 17:03:43
啊等等,沒關係。 http://www.koders.com/csharp/fidBFC9EC6A462D72BD2E6AA18F76B771781E8504F8.aspx?s=cdef%3Aajax是AjaxControlToolKit的源代碼。顯然'kooboo'項目把它從那裏撕了出來,然後把它放在他們自己的版權和GPL許可證之下......這段代碼實際上是在微軟公共許可證下,雖然沒關係.. – Earlz 2010-06-14 17:13:01
用什麼語言? – SLaks 2010-06-13 23:48:56
@SLa更新了問題 – Earlz 2010-06-13 23:50:06
您是否在.Net 4上? – 2010-06-14 00:16:41