【问题标题】:Replace function, how to replace not all founded strings?替换功能,如何替换并非所有已建立的字符串?
【发布时间】:2015-12-16 09:33:37
【问题描述】:

我从 excel 文件创建 XML 文件。我将一个单元格中的字符串保存在变量 sObserved 中。当在那个字符串中我有一个字符"&" 时,它应该被替换为"&",当我有一个字符";" 时,它应该被替换为"&#59;"。 我用这个函数替换,这是我的代码:

        sObserved = Replace(sObserved, "&", "&")
        sObserved = Replace(sObserved, ";", "&#59;")

但这不能正常工作,因为当它在"&" 上替换"&" 时,";" 会出现,接下来的操作会将其更改为"&amp&#59;" 如果我要更改订单,它也会出错,因为"&#59" 中的符号“&”将被替换。

有没有可能像我想要的那样替换它?我会很感激任何想法,因为我坚持在这里。

【问题讨论】:

标签: vba excel


【解决方案1】:

试试这个:

sObserved = Replace(sObserved, "&", "&")
sObserved = Replace(sObserved, ";", "&#59;")
sObserved = Replace(sObserved, "&amp&#59;", "&")

【讨论】:

  • 可能在最后一行你的意思是`(sObserved, "&", "&")。谢谢!当我更早地组合时,有如此简单的解决方案:)
  • 我喜欢简单优雅的解决方案,另外一个Replace,完美:)
【解决方案2】:

这个函数来自http://www.codeproject.com/Articles/33064/VBScript-HTML-Encode。您可能需要对其进行微调,但它会逐个字符地检查。

Function HTMLEncode(ByVal sVal)

    sReturn = ""

    If ((TypeName(sVal)="String") And (Not IsNull(sVal)) And (sVal<>"")) Then

        For i = 1 To Len(sVal)

            ch = Mid(sVal, i, 1)

            Set oRE = New RegExp : oRE.Pattern = "[ a-zA-Z0-9]"

            If (Not oRE.Test(ch)) Then
                ch = "&#" & Asc(ch) & ";"
            End If

            sReturn = sReturn & ch

            Set oRE = Nothing
        Next
    End If

    HTMLEncode = sReturn
End Function

【讨论】:

    【解决方案3】:

    您所追求的是一个将输出编码为 HTML 友好的函数:htmlEncode。人们写的网络上有几个脚本/函数,这里是一个:

    ' Encode an string so that it can be displayed correctly
    ' inside the browser.
    '
    ' Same effect as the Server.HTMLEncode method in ASP
    
    Function HTMLEncode(ByVal Text As String) As String
    Dim i As Integer
    Dim acode As Integer
    Dim repl As String
    
    HTMLEncode = Text
    
    For i = Len(HTMLEncode) To 1 Step -1
        acode = Asc(Mid$(HTMLEncode, i, 1))
        Select Case acode
            Case 32
                repl = "&nbsp;"
            Case 34
                repl = "&quot;"
            Case 38
                repl = "&amp;"
            Case 60
                repl = "&lt;"
            Case 62
                repl = "&gt;"
            Case 32 To 127
                ' don't touch alphanumeric chars
            Case Else
                repl = "&#" & CStr(acode) & ";"
        End Select
        If Len(repl) Then
            HTMLEncode = Left$(HTMLEncode, i - 1) & repl & Mid$(HTMLEncode, _
                i + 1)
            repl = ""
        End If
    Next
    End Function
    

    参考:http://www.devx.com/vb2themax/Tip/19162

    这里还有一个:http://www.codeproject.com/Articles/33064/VBScript-HTML-Encode 但这似乎编码了所有不是字符或字母的东西。这篇文章中的正则表达式可能会扩展得更好一些,以包含那些适用于 HTML 的内容。

    Function HTMLEncode(ByVal sVal)
    
    sReturn = ""
    
    If ((TypeName(sVal)="String") And (Not IsNull(sVal)) And (sVal<>"")) Then
    
        For i = 1 To Len(sVal)
    
            ch = Mid(sVal, i, 1)
    
            Set oRE = New RegExp : oRE.Pattern = "[ a-zA-Z0-9]"
    
            If (Not oRE.Test(ch)) Then
                ch = "&#" & Asc(ch) & ";"
            End If
    
            sReturn = sReturn & ch
    
            Set oRE = Nothing
        Next
    End If
    
    HTMLEncode = sReturn
    End Function
    

    【讨论】:

      猜你喜欢
      • 2011-09-18
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 2011-11-23
      • 2022-01-11
      • 2012-10-23
      • 1970-01-01
      • 2013-09-22
      相关资源
      最近更新 更多