非法字符有五个
| 非法字符 | HTML字符 | 字符编码 |
|---|---|---|
| 和 & | & | & |
| 单引号 ’ | ' | ' |
| 双引号 ” | " | " |
| 大于号 > | > | > |
| 小于号 < | < | < |
解决办法:1.标签之间的字符串用<![CDATA[" 标记开始,以"]]>结尾,<![CDATA[‘内容’]]>被<![CDATA[]]>括起来的实体XML解析器会当成单纯字符串解析
2.将五个非法字符分别进行转义成HTML字符(正则表达式)
T-SQL特定标签加上<![CDATA[]]>实例:
--select dbo.[FN_AddEntityToStrXml]('<sad>&<>''"</sad>','<sad>','</sad>')
ALTER FUNCTION [dbo].[FN_AddEntityToStrXml]
(
@p_XmlData nvarchar(max), --要转化的Xml字符串
@entityLabelStart nvarchar(max), --要具体转化的实体标签
@entityLabelEnd nvarchar(max)
)
RETURNS nvarchar(max)
BEGIN
declare @count int =1, @startCount int =0,@startReplaceStr int =0,@endReplaceStr int =0
While @count>0
begin
if CHARINDEX(@entityLabelStart,@p_XMLData,@startCount)>0 --如果xml存在此标签
begin
set @startReplaceStr=CHARINDEX(@entityLabelStart,@p_XMLData,@startCount) --起始标签位
set @endReplaceStr=CHARINDEX(@entityLabelEnd,@p_XMLData,@startReplaceStr) --结束标签位
set @p_XMLData=STUFF(@p_XMLData,@startReplaceStr+len(@entityLabelStart),0,'<![CDATA[') --起始标签位后加上<![CDATA[字符串
set @p_XMLData=STUFF(@p_XMLData,@endReplaceStr+len('<![CDATA['),0,']]>') --结束标签位前加上]]>字符串
set @startCount = @endReplaceStr+len('<![CDATA[]]>') --下一个标签位
end
else
begin
set @count = 0
end
end
return @p_XmlData
END
6394

被折叠的 条评论
为什么被折叠?



