SQL Server中HTML标签转义异常问题求助
解决SQL中FOR XML PATH导致HTML标签二次转义的问题
这个问题我之前处理过好几次,本质是FOR XML PATH默认的自动转义机制在搞事情!你当前的写法里,子查询生成的HTML标签先被转义了一次(比如<变成<),然后外层的字符串拼接又触发了二次转义,最终就出现了&lt;这种双重转义的结果。
修复方案:用TYPE属性+value()方法避免转义
只需要给子查询加上TYPE参数,让它返回XML类型,再通过.value()方法提取纯文本,就能跳过自动转义,得到正常的HTML标签。同时还要修正[er.id]的拼接方式——你之前是把字段名写在字符串里,需要转换成实际的字段值才行。
修改后的完整SQL如下:
SELECT e.*, STUFF( ( SELECT ',' + '<a href=test.aspx?tab=2&name=wil&item_id=' + CAST(er.id AS VARCHAR(50)) + '>' + er.name + '</a>' FROM dbo.role er FOR XML PATH ('') , TYPE ).value('text()[1]','nvarchar(max)'), 1, 1, '' ) AS all_roles FROM dbo.worker e
关键修改点说明:
- 子查询末尾添加
TYPE:让查询结果以XML类型返回,而不是自动转义后的字符串。 - 使用
.value('text()[1]','nvarchar(max)'):从XML对象中提取文本内容,这个过程不会对HTML特殊字符进行转义。 - 修正
er.id的拼接:用CAST(er.id AS VARCHAR(50))把ID字段转换成字符串,才能正确拼接到URL中(如果你的ID是数值类型的话)。
这样运行后,生成的HTML标签就会是正常的<a href=...>格式,不会再出现双重转义的问题啦!
内容的提问来源于stack exchange,提问作者namzaG
相关产品推荐
相关产品推荐

