转义Qualtrics管道文本以便在javascript中使用(更一般地说,如何安全地转义用户生成的文本)

oct*_*ern 7 javascript security escaping qualtrics

在我的Qualtrics调查中,我有一个免费回复(文本框)问题.我想将这个问题的回答转换为javascript,这样我就可以做一些复杂的文本处理并将结果发布到外部页面.

看起来官方的Qualtrics方法是使用管道文本代码:

var answer = "${q://QID1/ChoiceTextEntryValue}"
Run Code Online (Sandbox Code Playgroud)

但这会生成javascript代码,并在代码中插入文字响应.如果调查对象在其回复中加上引号,则会破坏代码.我也验证了它可以用来注入任意的javascript!

有没有办法安全地将用户生成的值分配给变量?

我尝试过的:

  • 如果有一个API调用将响应直接放入javascript变量而不必使用管道文本,那就太好了.我已经检查了他们的API文档并与技术支持人员进行了交谈,看起来并不存在这样的功能.
  • 如果Qualtrics有一个内置的字符替换功能,我可以使用它来删除引号,这也会很有帮助,但我认为它没有.
  • 我可以使用响应验证来阻止受访者提交带有引号的响应.这是我提出的唯一可行的解​​决方案,但对用户来说会很烦人.

Gor*_*ald 0

我参加聚会有点晚了,但是通过遵循此支持票,我能够得到如下问题响应文本:

Qualtrics.SurveyEngine.addOnPageSubmit(function()
{

/* Get current question ID (e.g. 'QID10') */
var qid_str = this.questionId;

/* console log to check what ID was capture (you can comment this line)*/
console.log('Question is: QR~' + qid_01_str)

// Save the current question's response value QR~QID247~TEXT
var responseTextField = document.getElementById('QR~' + qid_str);
var currentResponse = responseTextField.value;

/* console log to see what was captured (you can comment this line too)*/
console.log('response text is: ' + currentResponse)

});
Run Code Online (Sandbox Code Playgroud)

这解决了我自己的问题,管道文本中的双引号破坏了东西。希望它能帮助像我这样也有这个问题的其他考古学家!