jta*_*tum 2 google-apps-script
如果我有一个HTML文件test.html:
<p><?= str ?></p>
和脚本功能:
var t = HtmlService.createTemplateFromFile("test.html");
t.str = "test\nstring";
var content = t.evaluate().setSandboxMode(...).getContent();
Logger.log(content);
有没有办法用HTML换行符安全地替换换行符?我可以使用String.prototype.replace()来代替\n用<br/>,但后来我不得不使用<?!=禁用HTML模板引擎的上下文转义.我正在处理不受信任的输入,所以我需要转义和智能处理换行符.在上下文中使用它会很好.事实上,我编写了自己的escaper,但它只适用于一个上下文.
我为你的场景看到两个选项,简单的一个是完全忘记替换并使用<pre>标签,这将呈现你的换行符(以及其他格式化字符)
<pre> <?= str ?> </pre>
第二种是使用自定义函数执行替换和清理输入,以便您可以安全地使用force print scriptlet.
在你的HTML中:
<?!= sanitize(str); ?>
并在你的.gs:
function sanitize(val){
  var vals = val.split('\n'); //split string into an array on newlines
  for(var i in vals){
    vals[i] = Encoder.htmlEncode(vals[i]);  //sanitize each element in the array
  }
  return vals.join('<br />'); //join the elements as a string, with <br /> as glue.
}
请注意,在我的示例中,我使用位于此处的库来清理字符串:http://www.strictly-software.com/scripts/downloads/encoder.js