vbscript创建转换带有特殊字符的xml

its*_*aja 2 xml vbscript

我正在.vbs文件中创建一个具有以下节点值的xml文件,

  <car>David's</car>
  <company>Mannar & Co.</company>
Run Code Online (Sandbox Code Playgroud)

在解析此xml时,我发现&等问题。

我想将所有可能的 xml特殊字符转换为编码字符(带有函数或其他内容),以便在解析时得到原始内容。

感谢您。

Rot*_*ron 6

这是旧帖子,但我在回复,因为我希望这可以为某人节省一些痛苦

我正在处理一个问题,供应商抱怨在某些情况下,并非所有特殊字符都在XML中转义。我惊讶地发现开发人员使用了自己的逻辑(函数),而不使用框架提供的某些功能,因为转义听起来像是一项非常常见的任务。以下是修复之前的功能:

Function HTML_Encode(byVal string)
  Dim tmp, i 
  tmp = string
  For i = 160 to 255
    tmp = Replace(tmp, chr(i), "&#" & i & ";")
  Next
  tmp = Replace(tmp, chr(34), "&quot;")
  tmp = Replace(tmp, chr(39), "&apos;")
  tmp = Replace(tmp, chr(60), "&lt;")
  tmp = Replace(tmp, chr(62), "&gt;")
  tmp = Replace(tmp, chr(38), "&amp;") <- the problem: this line should be the first replacement
  tmp = Replace(tmp, chr(32), "&nbsp;")
  HTML_Encode = tmp
End Function
Run Code Online (Sandbox Code Playgroud)

有趣的是,它看起来与该帖子的答案之一完全相同(可能是从这里复制的:-)。

我将问题追究到替换特殊字符的顺序。替换“&”号(&必须是第一个替换项(行),因为替换项(例如&quot;:)正在注入“&”号,然后将替换为&amp;。举例来说,如果我有以下字符串:We <3 SO。原始(上方)函数会将其转义为:We &amp;lt;3 SO。正确的转义是:We &lt;3 SO

因此,修改后的功能可以是:

  Function HTML_Encode(byVal string)
      Dim tmp, i 
      tmp = string

      tmp = Replace(tmp, chr(38), "&amp;") <- Must be the first replacement (Thanks Aaron)

      For i = 160 to 255
        tmp = Replace(tmp, chr(i), "&#" & i & ";")
      Next

      tmp = Replace(tmp, chr(34), "&quot;")
      tmp = Replace(tmp, chr(39), "&apos;")
      tmp = Replace(tmp, chr(60), "&lt;")
      tmp = Replace(tmp, chr(62), "&gt;")
      tmp = Replace(tmp, chr(32), "&nbsp;")
      HTML_Encode = tmp
    End Function
Run Code Online (Sandbox Code Playgroud)

为了完整起见,您可以在此处找到XML中的预定义实体