1

我正在通过后面的代码输出客户端函数调用

Page.ClientScript.RegisterStartupScript( this.GetType(), "supportItems", scriptCalls, true );

scriptCalls 包含对客户端函数的调用,该函数具有从数据库中获取的几个字符串参数,然后在 HTML 文本区域中显示参数,因此最终需要保留换行符。如果 DB 值包含换行符,则换行符将包含在输出的客户端脚本中,这当然会导致客户端脚本错误。

我尝试通过清理函数传递 DB 值来替换换行符 ala:

private string CleanJavaScriptString( string stringToClean )
{
    string cleanString = stringToClean.Replace( "'", "\'" );
cleanString = cleanString.Replace( Environment.NewLine, "\n" );
return cleanString;
}

但这仍然会在代码中输出实际的换行符。我怎样才能做到这一点?

4

2 回答 2

3

你需要双重转义换行符,所以......

private string CleanJavaScriptString( string stringToClean )
{
    string cleanString = stringToClean.Replace( "'", "\'" );
cleanString = cleanString.Replace( Environment.NewLine, "\\n" );
return cleanString;
}
于 2012-07-11T12:11:41.100 回答
3

如果您可以访问它(.NET 3.5 及更高版本),最好使用它JavaScriptSerializer...

Private Sub MesgBox(ByVal sMessage As String)
  Dim serializer as New System.Web.Script.Serialization.JavaScriptSerializer()
  Dim msgedtble As String = serializer.Serialize(sMessage)
  Page.ClientScript.RegisterStartupScript(Me.GetType, "myScripts",
    "<script type='text/javascript'>alert(" & msgedtble & ");</script>")
End Sub

这取自this question/answer

JavaScriptSerializer 的优势在于它将处理引号、换行符以及所有您可能没有想到的字符,这些字符会影响 JavaScript。

编辑

这是一个相当于你所要求的 C#...

private string CleanJavaScriptString( string stringToClean )
{
  System.Web.Script.Serialization.JavaScriptSerializer serializer = new 
    System.Web.Script.Serialization.JavaScriptSerializer();
  return serializer.Serialize(stringToClean);
}
于 2012-07-11T12:18:19.623 回答