XML分支:输出未转义的文本
xml twig: output unescaped text
我使用Perl的XML::Twig模块将XML转换为(X)HTML。我需要输出一个Javascript元素,看起来像这样:
<script type="text/javascript">window.onload = function(){for(i = 1; i < 5; i++)collapse("tbl" + i);}</script>
由于脚本包含"<",这不是xml批准的,当我调用$node->set_text($code);
时,它被转义为"<",这破坏了它。如何输出文本而不转义?如果这是不可能的或不好的,我该如何绕过它?
如果希望XHTML格式良好,仍然需要转义'<'。这当然是Javascript不喜欢的。
因此,解决方案是将脚本放在CDATA部分中,您可以在XML::Twig中通过给元素标记'#CDATA
'
perl -MXML::Twig -E'say XML::Twig::Elt->new( script)->set_cdata( "a<b")->sprint'
# <script><![CDATA[a<b]]></script>
如果您想将所有脚本封装在CDATA中,方法如下:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
XML::Twig->new( twig_roots => { script => sub { if( my $s= $_->text) { $_->set_cdata( $s); }
$_->print;
},
},
twig_print_outside_roots => 1,
)
->parsefile( $ARGV[0]);
这将只包装本地脚本,而不会对已经包装好的脚本进行双重包装。
相关文章:
- jinjaurl命名的路由转义了大括号文本
- 附加 HTML 转义文本:jQuery
- jQuery 获取原始文本(未转义),以便通过下划线模板进一步解析
- 将jQuery节点转义为文本,以便HTML代码可见
- 在javascript中将转义文本转换为html
- 如何在Javascript对象文本中转义Backslash
- 为什么RegEx输出转义文本而不是HTML
- 使用转义键在余烬文本视图中取消操作
- 使用 Jquery 创建具有转义文本 + HTML 的元素
- 如何取消转义 JavaScript 字符串文本值
- 在将它们设置为文本区域的值之前,我必须转义字符串吗?
- 转义 Qualtrics 管道文本以在 JavaScript 中使用(更一般地说,如何安全地转义用户生成的文本)
- 字符串转义,从文本文件中读取
- 正则表达式文本中的Unicode代码点转义-Javascript
- 使用javascript转义用户给定的文本.有些事情'unescape'插入页面时
- 文本区域中的转义字符,但不在列表中
- 打印javascript转义文本时缺少脚本标记
- 转义所有文本输入类型上的所有特殊字符以防止XSS
- 非转义文本编码在php,在javascript
- 函数转义文本,但允许某些标记