来自具有未转义引号的动态数据的JavaScript字符串声明

时间:2013-07-19 14:52:44

标签: javascript string escaping quotes

我正在为内容管理系统编写JavaScript模板,用户填写传递给我的模板的文本输入字段。

我的问题是输入字段中的引号在传递给我的模板之前没有被转义,所以我无法知道它们是包含单引号还是双引号,甚至两者都不包含。无论我尝试处理数据的哪种方式,我的代码最终都会破坏,因为引号会终止字符串声明。我想在数据上运行一个函数来转义引号,但是我找不到一种方法来首先将数据转换为有效的变量。

有没有办法安全地处理JavaScript中的数据而不破坏字符串变量声明?

编辑:我正在发布代码示例;

CMS文字输入字段值是:谁将赢得我们的“大赛”?

文本输入字段占位符宏是[%TextInput%]

我正在使用JS / HTML / CSS

为此输入构建HTML模板
<script>
(function(){
  var textInputStr = "[%TextInput%]";
})();
</script>

如果TextInput的值包含单引号,则会破坏字符串声明,反之亦然。

2 个答案:

答案 0 :(得分:0)

  

我想在数据上运行一个函数来转义引号,但是我找不到一种方法来首先将数据转换为有效变量。

好吧,你必须在之前使它成为一个有效的字符串文字,你可以在其上运行JavaScript函数。没有其他办法(除非你计算模板脚本的ajax请求以获取它的字符串表示)。

  

输入字段在传递到我的模板

之前不会被转义

然后解决这个问题。在JavaScript中你无能为力。

答案 1 :(得分:0)

这是一个很棒的问题,值得回答。 JS中的字符串没有自定义分隔符,就像大多数其他现代语言一样,因此您可能会陷入困境。但是一个解决方案是使用其中的占位符构建脚本标记,然后找到该标记的innerHTML并将字符串重新捕获到变量中。例如

<script id="parseMe" type="text/template">
[%TextInput%]
</script>

然后使用

var yourString = document.getElementById("parseMe").innerHTML

现在您可以随意操作字符串。

HTH!