当从代码后台输出Javascript时,如何处理换行符

How to deal with linebreaks when outputting Javascript from code behind

本文关键字:何处理 处理 换行符 代码 后台 输出 Javascript      更新时间:2023-09-26

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

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;
}

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

如果您可以访问它(.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

这取自这个问题/答案。

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

编辑

这里有一个C#,相当于你所要求的。。。

private string CleanJavaScriptString( string stringToClean )
{
  System.Web.Script.Serialization.JavaScriptSerializer serializer = new 
    System.Web.Script.Serialization.JavaScriptSerializer();
  return serializer.Serialize(stringToClean);
}

您需要双重转义换行符,因此…

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