阻止Play模板引擎转义JavaScript引号

时间:2014-03-18 14:13:31

标签: scala templates playframework-2.0 escaping

我想使用Play框架中的模板添加Facebook帖子。问题是,即使@Html不应该转义HTML实体,它们也会被转义。结果"变为",并且不评估脚本。

嵌入代码

post = "<div id="fb-root"></div> 
<script>
  (function(d, s, id) { 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) return; 
    js = d.createElement(s); 
    js.id = id; 
    js.src = "//connect.facebook.net/de_DE/all.js#xfbml=1"; 
    fjs.parentNode.insertBefore(js, fjs); 
   }(document, 'script', 'facebook-jssdk'));
</script>
<div class="fb-post" data-href="https://www.facebook.com/FacebookDevelopers/posts/10151945402933553" data-width="466">
  <div class="fb-xfbml-parse-ignore">
    <a href="https://www.facebook.com/FacebookDevelopers/posts/10151945402933553">Beitrag</a> von <a href="https://www.facebook.com/FacebookDevelopers">Facebook Developers</a>.
  </div>
</div>"`

模板 @Html(post)

输出

<div id="fb-root"></div> 
<script>
  (function(d, s, id) { 
      var js, fjs = d.getElementsByTagName(s)[0]; 
      if (d.getElementById(id)) return; 
      js = d.createElement(s); 
      js.id = id; 
      js.src = &quot;//connect.facebook.net/de_DE/all.js#xfbml=1&quot;;
      fjs.parentNode.insertBefore(js, fjs);
    }(document, &apos;script&apos;, &apos;facebook-jssdk&apos;));
</script>
<div class="fb-post"; data-href="https://www.facebook.com/FacebookDevelopers/posts/10151945402933553" data-width="466">
   <div class="fb-xfbml-parse-ignore">
     <a href="https://www.facebook.com/FacebookDevelopers/posts/10151945402933553">Beitrag</a> von <a href="https://www.facebook.com/FacebookDevelopers">Facebook Developers</a>.
   </div>
 </div>

我真的卡住了,因为@Html()没有按照它应该做的事情进行according to the doc

1 个答案:

答案 0 :(得分:2)

它的工作方式与文档说的完全相同,例如: 模板:

@()
@Html("<div>&\"</div>")

会给你这个输出:

<div>&"</div>

因此,你的应用程序中肯定会发生其他事情,即html-转义字符串。