Javascript 在下面的场景中,有什么可以帮助我了解如何处理单引号转义吗

Javascript 在下面的场景中,有什么可以帮助我了解如何处理单引号转义吗,javascript,internationalization,Javascript,Internationalization,我们为客户端编写js程序,允许它们手工制作显示文本。这就是我们所做的 例如,我们有一个原始js文件,它用令牌替换了这些字符串 month = [_MonthToken_]; name = '_NameToken_'; 并有一个xml文件,允许用户指定如下文本 <xml> <token name="MonthToken">'Jan','Feb','March'</token> <token name="NameToken">Alic

我们为客户端编写js程序,允许它们手工制作显示文本。这就是我们所做的

例如,我们有一个原始js文件,它用令牌替换了这些字符串

month = [_MonthToken_];
name = '_NameToken_';
并有一个xml文件,允许用户指定如下文本

<xml>
    <token name="MonthToken">'Jan','Feb','March'</token>
    <token name="NameToken">Alice</token>
</xml>
然而,我发现在这个场景中有一个bug。当有人指定名称为“D'Angelo”(例如)时,js将运行错误,因为name变量将变为

name='D'Angelo'
我们已经想出了几种方法来解决这个问题,但没有一种是完美的

我们可能会要求我们的客户转义这些字符,这似乎不合适,因为他们可能不知道js,还有更多的情况需要转义(“,”),这可能会让他们不高兴:|

我们还考虑将生成器更改为escape',但有时文本可能会替换数组,其中的单个引号不应转义。(还有其他情况,我们可能会逐个检测,但这很繁琐)

我们可能在整个场景/架构中做了一些错误的事情。但是我们不想改变这一点,除非我们已经确认这是绝对必要的

那么,有什么解决办法吗?我会仔细研究每一个想法。提前谢谢你


(我可能还需要一个更好的标题:p)

我认为您的xml模式设计欠佳,这是问题的根本原因

基本上,您是在强迫xml的作者将Javascript代码放入
name=“MonthToken“
元素,而您假装她可以在不了解Javascript语法的情况下执行此操作。我猜您计划对解析的元素内容使用
eval
来构建
month
name
变量

您发现的问题并不是唯一的:您还受到Javascript代码注入的影响:如果用户伪造一个元素,例如:

<token name="MonthToken">alert('put some evil instruction here')</token>

标准字符串应该是您所需要的全部
str.replace(/'/g,'\\\'')否则,如果你没有更具体的说明,那么就很难回答你的问题。@Xotic750我不能简单地逃避单一配额。您可以看到这样的示例:month是一个带有标记MonthToken的数组,因此此标记中的单引号不应转义。为什么在每个month标记周围都需要
,这真的有必要吗?我看不出XML是如何生成/转换为Javascript的。我们无法猜测生成器的工作方式。@Xotic750本月只是一个示例,说明某些数组声明也有要替换的令牌。我不必做“每月左右”的代币。但由于该程序已经发布,更改它会很麻烦,特别是xml文件是由客户端创建的。您可以将生成器想象成从xml文件中提取文本,然后替换原始js文件中相应的标记的东西。(它有两个输入,xml文件和一个带令牌的js文件,一个输出,最后的js文件。)谢谢。我想问题是,既然我们已经发布了API,什么是最麻烦的,什么可以和不能修复?我认为这就是所谓的“一块石头和一块硬地”,另一个关于修复它的短语是“必须咬紧牙关”。
<token name="MonthToken">alert('put some evil instruction here')</token>
<xml>
    <token name="MonthToken">Jan</token>
    <token name="MonthToken">Feb</token>
    <token name="MonthToken">March</token>
    <token name="NameToken">Alice</token>
</xml>
if (month.length == 1) {
    month = month[0];
}