Google Apps脚本:模板化HTML scriptlet中的换行符

jta*_*tum 2 google-apps-script

如果我有一个HTML文件test.html:

<p><?= str ?></p>
Run Code Online (Sandbox Code Playgroud)

和脚本功能:

var t = HtmlService.createTemplateFromFile("test.html");
t.str = "test\nstring";
var content = t.evaluate().setSandboxMode(...).getContent();
Logger.log(content);
Run Code Online (Sandbox Code Playgroud)

有没有办法用HTML换行符安全地替换换行符?我可以使用String.prototype.replace()来代替\n<br/>,但后来我不得不使用<?!=禁用HTML模板引擎的上下文转义.我正在处理不受信任的输入,所以我需要转义和智能处理换行符.在上下文中使用它会很好.事实上,我编写了自己的escaper,但它只适用于一个上下文.

Cam*_*rts 5

我为你的场景看到两个选项,简单的一个是完全忘记替换并使用<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