2017-05-05 30 views
-3

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

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

这样:

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

如何做到这一点?

+0

分享你的研究可以帮助每个人。告诉我们你试过了什么,以及它为什么不符合你的需求。这表明你已经花时间去尝试帮助自己,它使我们避免重申明显的答案,最重要的是它可以帮助你得到更具体和相关的答案!另请参阅:[问] –

+0

标签在哪里存在?与其他标签?或者在一个独立的字符串? – OmegaMan

回答

0

你可以把你的机会,与此

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

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

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

否则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]*?))))>

你会写回非脚本标记,当你得到一个脚本标签
做你的代替开始了。

相关问题