Je suis en train de passer de la sortie de SQL Server exception pour le client à l'aide de l' RegisterStartUpScript
méthode de la MS ScriptManager .NET 3.5. Cela fonctionne très bien pour quelques erreurs, mais lorsque l'exception contient des apostrophes l'alerte échoue.
Je ne veux pas seulement échapper les guillemets simples. Est-il une fonction standard, je peux appeler pour échapper les caractères spéciaux pour une utilisation en JavaScript?
string scriptstring = "alert('" + ex.Message + "');";
ScriptManager.RegisterStartupScript(this, this.GetType(), "Alert", scriptstring , true);
EDIT:
Merci @tpeczek, le code presque fonctionné pour moi :) mais avec une légère modification (l'échappement de guillemets simples), il fonctionne un régal.
J'ai inclus ma version modifiée ici...
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();
}
}
Comme mentionné ci-dessous - source originale: ici