如何在C#中将脚本标记包装到cdata中?

时间:2017-05-05 13:25:28

标签: c# .net regex

如何包装:

<script> if (typeof ty === "undefined") { var ty = { chainOnLoad: function(onLoadHandler..</script>

到此:

//<![CDATA[<script> if (typeof ty === "undefined") { var ty = { chainOnLoad:  function(onLoadHandler.. </script>//]]>

怎么做?

1 个答案:

答案 0 :(得分:0)

你可以利用这个机会

查找(<(?:script(?:\s+(?>"[\S\s]*?"|'[\S\s]*?'|(?:(?!/>)[^>])?)+)?\s*>)[\S\s]*?</script\s*>)

替换<![CDATA[$1]]>

然而,问题是浏览器将CDATA解析为<![CDATA[[ [\ S \ s] *? ]]>
这意味着您必须为]]>处理$ 1( .here。) 序列,然后做一些事情来减轻它。

否则cdata将提前终止,留下残留的垃圾。

请注意,如果没有在第一个所有标签上找到CDATA,则无法找到CDATA 来/服务基础 原因是CDATA与任何标签一样可以隐藏在其他构造中。

通常,解析所有标记的表达式是

<(?:(?:(?:(script|style|object|embed|applet|noframes|noscript|noembed)(?:\s+(?>"[\S\s]*?"|'[\S\s]*?'|(?:(?!/>)[^>])?)+)?\s*>)[\S\s]*?</\1\s*(?=>))|(?:/?[\w:]+\s*/?)|(?:[\w:]+\s+(?:"[\S\s]*?"|'[\S\s]*?'|[^>]?)+\s*/?)|\?[\S\s]*?\?|(?:!(?:(?:DOCTYPE[\S\s]*?)|(?:\[CDATA\[[\S\s]*?\]\])|(?:--[\S\s]*?--)|(?:ATTLIST[\S\s]*?)|(?:ENTITY[\S\s]*?)|(?:ELEMENT[\S\s]*?))))>

当你得到一个脚本标签时,你会先回写非脚本标签 做你的替代。