Ich versuche, die Ausgabe einer SQL Server-Ausnahme mithilfe der RegisterStartUpScript
Methode des MS ScriptManager in .NET 3.5 an den Client zu übergeben . Dies funktioniert bei einigen Fehlern einwandfrei. Wenn die Ausnahme jedoch einfache Anführungszeichen enthält, schlägt die Warnung fehl.
Ich möchte jedoch nicht nur einfachen Anführungszeichen entkommen. Gibt es eine Standardfunktion, die ich aufrufen kann, um Sonderzeichen für die Verwendung in JavaScript zu umgehen?
string scriptstring = "alert('" + ex.Message + "');";
ScriptManager.RegisterStartupScript(this, this.GetType(), "Alert", scriptstring , true);
EDIT :
Danke @tpeczek, der Code hat fast für mich funktioniert :) aber mit einer kleinen Änderung (das Entkommen von einfachen Anführungszeichen) funktioniert es ein Vergnügen.
Ich habe meine geänderte Version hier aufgenommen ...
public class JSEncode
{
/// <summary>
/// Encodes a string to be represented as a string literal. The format
/// is essentially a JSON string.
///
/// The string returned includes outer quotes
/// Example Output: "Hello \"Rick\"!\r\nRock on"
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public static string EncodeJsString(string s)
{
StringBuilder sb = new StringBuilder();
sb.Append("\"");
foreach (char c in s)
{
switch (c)
{
case '\'':
sb.Append("\\\'");
break;
case '\"':
sb.Append("\\\"");
break;
case '\\':
sb.Append("\\\\");
break;
case '\b':
sb.Append("\\b");
break;
case '\f':
sb.Append("\\f");
break;
case '\n':
sb.Append("\\n");
break;
case '\r':
sb.Append("\\r");
break;
case '\t':
sb.Append("\\t");
break;
default:
int i = (int)c;
if (i < 32 || i > 127)
{
sb.AppendFormat("\\u{0:X04}", i);
}
else
{
sb.Append(c);
}
break;
}
}
sb.Append("\"");
return sb.ToString();
}
}
Wie unten erwähnt - Originalquelle: hier