Powershell中如何避免字符串的&被转义为&amp
PowerShell字符串写入时&被二次转义的解决方案
问题根因
你遇到的&被自动转换为&的问题,是写入文件时使用了自带HTML/XML实体编码逻辑的操作(比如输出到HTML文档、写入XML节点、使用带编码转换的处理cmdlet),导致原始字符串里的&被识别为HTML实体标识符做了二次转义。
解决方案
方案1:使用纯文本写入cmdlet(最推荐)
直接使用原生纯文本写入命令,不会触发实体编码逻辑:
# 方式1:使用Out-File $sample | Out-File -FilePath "你的文件路径" -Encoding UTF8 # 方式2:使用Set-Content Set-Content -Path "你的文件路径" -Value $sample -Encoding UTF8
方案2:从根源避免特殊字符
定义连接字符串时直接使用PowerShell原生转义规则,不要使用HTML实体",从根源消除&字符:
# 单引号包裹字符串,内部双引号不需要额外转义 $sample = 'provider connection string="User Id=aa;Password=aa;Host=127.0.0.1;"' # 或者双引号包裹时用反引号转义内部双引号 $sample = "provider connection string=`"User Id=aa;Password=aa;Host=127.0.0.1;`""
方案3:已被转义内容的还原
如果内容已经被转义,可以用HTML解码方法还原后再写入:
Add-Type -AssemblyName System.Web # 解码已被转义的字符串 $decodedContent = [System.Web.HttpUtility]::HtmlDecode("已被转义的字符串内容") # 写入文件 $decodedContent | Out-File -FilePath "你的文件路径" -Encoding UTF8
方案4:写入XML/HTML场景的特殊处理
如果必须要写入XML/HTML格式文件,可将连接字符串放入CDATA段,避免解析器转义特殊字符:
# XML写入示例 $xmlNode.InnerXml = "<![CDATA[$sample]]>"
内容的提问来源于stack exchange,提问作者Guarn
相关产品推荐
相关产品推荐

