我正在.vbs文件中创建一个具有以下节点值的xml文件,
<car>David's</car>
<company>Mannar & Co.</company>
Run Code Online (Sandbox Code Playgroud)
在解析此xml时,我发现&等问题。
我想将所有可能的 xml特殊字符转换为编码字符(带有函数或其他内容),以便在解析时得到原始内容。
感谢您。
这是旧帖子,但我在回复,因为我希望这可以为某人节省一些痛苦
我正在处理一个问题,供应商抱怨在某些情况下,并非所有特殊字符都在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), """)
tmp = Replace(tmp, chr(39), "'")
tmp = Replace(tmp, chr(60), "<")
tmp = Replace(tmp, chr(62), ">")
tmp = Replace(tmp, chr(38), "&") <- the problem: this line should be the first replacement
tmp = Replace(tmp, chr(32), " ")
HTML_Encode = tmp
End Function
Run Code Online (Sandbox Code Playgroud)
有趣的是,它看起来与该帖子的答案之一完全相同(可能是从这里复制的:-)。
我将问题追究到替换特殊字符的顺序。替换“&”号(&)必须是第一个替换项(行),因为替换项(例如":)正在注入“&”号,然后将替换为&。举例来说,如果我有以下字符串:We <3 SO。原始(上方)函数会将其转义为:We &lt;3 SO。正确的转义是:We <3 SO。
因此,修改后的功能可以是:
Function HTML_Encode(byVal string)
Dim tmp, i
tmp = string
tmp = Replace(tmp, chr(38), "&") <- Must be the first replacement (Thanks Aaron)
For i = 160 to 255
tmp = Replace(tmp, chr(i), "&#" & i & ";")
Next
tmp = Replace(tmp, chr(34), """)
tmp = Replace(tmp, chr(39), "'")
tmp = Replace(tmp, chr(60), "<")
tmp = Replace(tmp, chr(62), ">")
tmp = Replace(tmp, chr(32), " ")
HTML_Encode = tmp
End Function
Run Code Online (Sandbox Code Playgroud)
为了完整起见,您可以在此处找到XML中的预定义实体
| 归档时间: |
|
| 查看次数: |
7069 次 |
| 最近记录: |