如何在 XQuery 函数中转义 Javascript
How to escape Javascript in an XQuery function
有没有办法在 xquery 函数中转义或呈现 Javascript?
示例:
xquery version "1.0-ml";
module namespace tagmanager = "tagmanager";
declare function tagmanager() { < noscript > < iframe src = "//www.googletagmanager.com/ns.html?id=[value]"
height = "0"
width = "0"
style = "display:none;visibility:hidden" > < /iframe></noscript >
< script > (function(w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({
'gtm.start': new Date().getTime(),
event: 'gtm.js'
});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src =
'//www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'value'); < /script>
};
一种方法是将 JavaScript 放在一个文本文件中,用单独的请求读取(这也有利于浏览器缓存)。
另一种是为元素的内容使用 CDATA 部分,如:
但是,您仍然必须对 CDATA 部分中的保留字符 (< > ' " &) 使用符号转义符。
希望对您有所帮助,
CDATA内容不需要转义。
该示例很迟钝,因为您在 XML 语言中生成 HTML,我建议将整个事物视为一个字符串。
显式 CDATA 构造函数只允许与一个元素一起使用,因此您需要一个包装器。
http://www.w3.org/TR/xquery/#doc-xquery-CDataSectionContents
示例:
xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";
declare function local:tagmanager() as xs:string
{
<wrapper>
<![CDATA[
< noscript > < iframe src = "//www.googletagmanager.com/ns.html?id=[value]"
height = "0"
width = "0"
style = "display:none;visibility:hidden" > < /iframe></noscript >
< script > (function(w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({
'gtm.start': new Date().getTime(),
event: 'gtm.js'
});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src =
'//www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'value'); < /script>
]]>
</wrapper>/string()
};
local:tagmanager()
我一直使用转义有问题的字符并将 HTML 视为格式正确的方法 XML:
(1) 转义有问题的字符,例如和号 (&
> &
) 和大括号,只需加倍:{
> {{
和}
> }}
(2) 如果提供多个元素,创建一个序列:(<element1/>, <element2/>)
将该方法应用于此示例:
(
<noscript>
<iframe src = "//www.googletagmanager.com/ns.html?id=[value]"
height = "0"
width = "0"
style = "display:none;visibility:hidden"></iframe>
</noscript>,
<script> (function(w, d, s, l, i) {{
w[l] = w[l] || [];
w[l].push({{
'gtm.start': new Date().getTime(),
event: 'gtm.js'
}});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src =
'//www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
}})(window, document, 'script', 'dataLayer', 'value');
</script>
)
也就是说,我喜欢 CDATA 方法 - 我以前从未想过!
有没有办法在 xquery 函数中转义或呈现 Javascript?
示例:
xquery version "1.0-ml";
module namespace tagmanager = "tagmanager";
declare function tagmanager() { < noscript > < iframe src = "//www.googletagmanager.com/ns.html?id=[value]"
height = "0"
width = "0"
style = "display:none;visibility:hidden" > < /iframe></noscript >
< script > (function(w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({
'gtm.start': new Date().getTime(),
event: 'gtm.js'
});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src =
'//www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'value'); < /script>
};
一种方法是将 JavaScript 放在一个文本文件中,用单独的请求读取(这也有利于浏览器缓存)。
另一种是为元素的内容使用 CDATA 部分,如:
但是,您仍然必须对 CDATA 部分中的保留字符 (< > ' " &) 使用符号转义符。
希望对您有所帮助,
CDATA内容不需要转义。 该示例很迟钝,因为您在 XML 语言中生成 HTML,我建议将整个事物视为一个字符串。 显式 CDATA 构造函数只允许与一个元素一起使用,因此您需要一个包装器。 http://www.w3.org/TR/xquery/#doc-xquery-CDataSectionContents
示例:
xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";
declare function local:tagmanager() as xs:string
{
<wrapper>
<![CDATA[
< noscript > < iframe src = "//www.googletagmanager.com/ns.html?id=[value]"
height = "0"
width = "0"
style = "display:none;visibility:hidden" > < /iframe></noscript >
< script > (function(w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({
'gtm.start': new Date().getTime(),
event: 'gtm.js'
});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src =
'//www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'value'); < /script>
]]>
</wrapper>/string()
};
local:tagmanager()
我一直使用转义有问题的字符并将 HTML 视为格式正确的方法 XML:
(1) 转义有问题的字符,例如和号 (&
> &
) 和大括号,只需加倍:{
> {{
和}
> }}
(2) 如果提供多个元素,创建一个序列:(<element1/>, <element2/>)
将该方法应用于此示例:
(
<noscript>
<iframe src = "//www.googletagmanager.com/ns.html?id=[value]"
height = "0"
width = "0"
style = "display:none;visibility:hidden"></iframe>
</noscript>,
<script> (function(w, d, s, l, i) {{
w[l] = w[l] || [];
w[l].push({{
'gtm.start': new Date().getTime(),
event: 'gtm.js'
}});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src =
'//www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
}})(window, document, 'script', 'dataLayer', 'value');
</script>
)
也就是说,我喜欢 CDATA 方法 - 我以前从未想过!