【问题标题】:string contains ' need to avoidstring contains ' 需要避免
【发布时间】:2015-06-11 06:45:49
【问题描述】:

我有一些vb代码如下:

Dim sb As System.Text.StringBuilder = New System.Text.StringBuilder()
    sb.Append("<script type=""text/javascript"">")
    sb.Append(" function addRow() {")
    sb.Append(" var div = document.createElement('div');")
    sb.Append(" div.className = 'panel panel-info';")
    sb.Append(" div.innerHTML = '")

    For i = 0 To dtf.Rows.Count - 1
        Dim NAME As String = dtf.Rows(i)(0).ToString
        Dim Datee As String = dtf.Rows(i)(3).ToString
        Dim commentsth As String = dtf.Rows(i)(2).ToString
        Dim urlh As String = dtf.Rows(i)(1).ToString
        sb.Append("<div class=""panel-heading"">")
        sb.Append(" <h4 class=""panel-title"">")
        sb.Append(" <a data-toggle=""collapse"" data-parent=""#accordion"" href=""" & urlh & """>")
        sb.Append(" " & NAME & "  " & Datee & "</a>")
        sb.Append(" </h4>")
        sb.Append(" </div>")
        sb.Append(" <div id=""collapse" & i & """ class=""panel-collapse collapse in"">")
        sb.Append(" <div class=""panel-body"">")
        sb.Append(" " & commentsth & "")
        sb.Append(" </div>")
        sb.Append(" </div>")
    Next
    sb.Append("';")
    sb.Append(" document.getElementById('WorldNews').appendChild(div);}")
    sb.Append("</script>")
    ClientScript.RegisterClientScriptBlock(Me.GetType(), "MyScript", sb.ToString())

此代码是在网页上附加一个 java-script 代码。

我的问题是,例如变量

commentsth 

包含字符

' or " or \  

它会影响输出,因为 ' 或 " 可能是字符串的结束标记

ie:如果 cmetsth="he's.." 那么问题就发生了..

    " '<div class=""panel-body"">" & he's.. & ""

我怎样才能避免这种情况。

【问题讨论】:

标签: asp.net vb.net


【解决方案1】:

对变量使用 HTML 编码字符串,例如将空格转换为 %20:

 sb.Append(" " & Uri.EscapeDataString(commentsth) & "")

同样在脚本中,您可能希望在将字符串实际附加到 WorldNews 之前包含一些内容以将其解码恢复正常:

sb.Append(" div.innerHTML = decodeURI('")
...
sb.Append("');")

【讨论】:

  • 谢谢,但现在问题不是空格,而是字符'
  • 是的,这个空间是一个例子......这适用于所有符号
  • 如果你自己做一些类似的事情,比如从 VB 替换所有 '"/ 到让我们说 %1%2%3... 然后在javascript将所有%1替换回'等等
  • {
    he's%20%22
    }......调试结果显示“he's”仍未编码
【解决方案2】:

您可以将'/"字符分别替换为&amp;apos;&amp;#47;&amp;quot;,生成的HTML应该知道它们是什么。

对于您要替换的每个字符,类似这样的内容,只需使用它的 ASCII HTML 字符代码: commentsth = commentsth.Replace("'", "&amp;apos;")

Link to ASCII Codes

【讨论】:

    【解决方案3】:

    创建一个函数来替换不需要的字符并将其添加到您的代码中,如下所示:

    ...
    sb.Append(" <div class=""panel-body"">")
    sb.Append(" " & ReplaceSpecials(commentsth) & "")
    sb.Append(" </div>")
    ...
    

    示例:

    Function ReplaceSpecials(ByVal Text As String) As String
        Return Text.Replace("'", "").Replace("\", "")
    End Function
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-24
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 2021-03-23
      • 2017-07-09
      • 1970-01-01
      相关资源
      最近更新 更多