在 xquery 中转义大于 javascript 中的符号
Escaping greater than symbols in javascript within xquery
我正在尝试在我的 xquery 中嵌入一小段 javascript,但我似乎无法让大于符号起作用。我已经避开了它们,但是当我查看结果时,它们在我的 javascript 代码中显示为 >。
这是我的代码:
xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";
xdmp:set-response-content-type("text/html; charset=utf-8"),
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> > This works...
<script>
var five = 5;
var is_more = function(n) {{
if n > 2 {{
return "Yes";
}} else {{
return "no";
}};
}}
console.log(is_more(five));
</script>
</html>
但是虽然转义适用于文本,但它在我的 javascript 中不起作用:
我确定这很明显,但我对 xquery 还很陌生。
将脚本放在评论区。您还需要在 if 语句中使用括号。
xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";
xdmp:set-response-content-type("text/html; charset=utf-8"),
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> > This works...
<script>
<!--
var five = 5;
var is_more = function(n) {
if (n > 2) {
return "Yes";
} else {
return "no";
};
}
console.log(is_more(five));
-->
</script>
</html>
只需将实际脚本放入 commented out CDATA tags (//<![CDATA[
... //]]>
) or XML comments (//<!--
... -->
),这将防止 <
、>
和 &
字符被编码为 XML 个实体。
xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";
xdmp:set-response-content-type("text/html; charset=utf-8"),
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> > This works...
<script>
//<![CDATA[
var five = 5;
var is_more = function(n) {{
if (n > 2) {{
return "Yes";
}} else {{
return "no";
}};
}}
console.log(is_more(five));
//]]>
</script>
</html>
CDATA 标签是更优雅的方式,但取决于序列化选项集(某些引擎可能会删除它们)。当没有显式设置序列化选项时,注释可能更能避免失败,这在 XQuery 1.0 中可能会很困难,因为它在 XQuery 3.0 之前没有标准化。将文档定义为 XHTML 还应该触发浏览器正确解析实体并使用 JavaScript 的解码字符。
我正在尝试在我的 xquery 中嵌入一小段 javascript,但我似乎无法让大于符号起作用。我已经避开了它们,但是当我查看结果时,它们在我的 javascript 代码中显示为 >。
这是我的代码:
xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";
xdmp:set-response-content-type("text/html; charset=utf-8"),
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> > This works...
<script>
var five = 5;
var is_more = function(n) {{
if n > 2 {{
return "Yes";
}} else {{
return "no";
}};
}}
console.log(is_more(five));
</script>
</html>
但是虽然转义适用于文本,但它在我的 javascript 中不起作用:
我确定这很明显,但我对 xquery 还很陌生。
将脚本放在评论区。您还需要在 if 语句中使用括号。
xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";
xdmp:set-response-content-type("text/html; charset=utf-8"),
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> > This works...
<script>
<!--
var five = 5;
var is_more = function(n) {
if (n > 2) {
return "Yes";
} else {
return "no";
};
}
console.log(is_more(five));
-->
</script>
</html>
只需将实际脚本放入 commented out CDATA tags (//<![CDATA[
... //]]>
) or XML comments (//<!--
... -->
),这将防止 <
、>
和 &
字符被编码为 XML 个实体。
xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";
xdmp:set-response-content-type("text/html; charset=utf-8"),
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> > This works...
<script>
//<![CDATA[
var five = 5;
var is_more = function(n) {{
if (n > 2) {{
return "Yes";
}} else {{
return "no";
}};
}}
console.log(is_more(five));
//]]>
</script>
</html>
CDATA 标签是更优雅的方式,但取决于序列化选项集(某些引擎可能会删除它们)。当没有显式设置序列化选项时,注释可能更能避免失败,这在 XQuery 1.0 中可能会很困难,因为它在 XQuery 3.0 之前没有标准化。将文档定义为 XHTML 还应该触发浏览器正确解析实体并使用 JavaScript 的解码字符。