string JavaScriptStringEncode(string value)
{
if (string.IsNullOrEmpty(value))
{
return string.Empty;
}
StringBuilder builder = null;
int startIndex = 0;
int count = 0;
for (int i = 0; i < value.Length; i++)
{
char c = value[i];
if ((((c == '\r') || (c == '\t')) || ((c == '"') || (c == '\''))) || ((((c == '<') || (c == '>')) || ((c == '\\') || (c == '\n'))) || (((c == '\b') || (c == '\f')) || (c < ' '))))
{
if (builder == null)
{
builder = new StringBuilder(value.Length + 5);
}
if (count > 0)
{
builder.Append(value, startIndex, count);
}
startIndex = i + 1;
count = 0;
}
switch (c)
{
case '<':
case '>':
case '\'':
{
AppendCharAsUnicodeJavaScript(builder, c);
continue;
}
case '\\':
{
builder.Append(@"\\");
continue;
}
case '\b':
{
builder.Append(@"\b");
continue;
}
case '\t':
{
builder.Append(@"\t");
continue;
}
case '\n':
{
builder.Append(@"\n");
continue;
}
case '\f':
{
builder.Append(@"\f");
continue;
}
case '\r':
{
builder.Append(@"\r");
continue;
}
case '"':
{
builder.Append("\\\"");
continue;
}
}
if (c < ' ')
{
AppendCharAsUnicodeJavaScript(builder, c);
}
else
{
count++;
}
}
if (builder == null)
{
return value;
}
if (count > 0)
{
builder.Append(value, startIndex, count);
}
return builder.ToString();
}
private static void AppendCharAsUnicodeJavaScript(StringBuilder builder, char c)
{
builder.Append(@"\u");
builder.Append(c.ToString("x4", CultureInfo.InvariantCulture));
}
转载于:https://www.cnblogs.com/joe-yang/archive/2010/06/19/1761035.html