我从一个数据库中输出值(它并不真正对公众开放,但它对公司的用户开放——这意味着,我不担心XSS)。

我试图输出一个这样的标签:

<a href="" onclick="DoEdit('DESCRIPTION');">Click Me</a>

DESCRIPTION实际上是一个来自数据库的值,它是这样的:

Prelim Assess "Mini" Report

我尝试用“\”替换“”,但无论我怎么尝试,Firefox总是在单词evaluate后的空格后面切断我的JavaScript调用,这导致了各种各样的问题。

我肯定错过了那个显而易见的答案,但我怎么也想不出来。

有人想指出我的愚蠢吗?

这里是整个HTML页面(它将是一个ASP。NET页面最终,但为了解决这个问题,我拿出了一切,但问题代码)

<html>
    <body>
        <a href="#" onclick="DoEdit('Preliminary Assessment \"Mini\"'); return false;">edit</a>
    </body>
</html>

当前回答

“;在这个特殊的情况下,就像我之前建议的,因为HTML上下文。

然而,如果你想让你的JavaScript代码在任何上下文中独立转义,你可以选择原生JavaScript编码: '变成\x27 变成了\x22

所以你的onclick会变成:DoEdit('初步评估\x22Mini\x22');

例如,当将JavaScript字符串作为参数传递给另一个JavaScript方法时(alert()是一个简单的测试方法),这也可以工作。

我指的是重复的堆栈溢出问题,我如何转义一个onClick处理程序内的JavaScript代码中的字符串?

其他回答

请在下面的代码中找到,它使用正则表达式转义单引号作为输入字符串的一部分。它验证用户输入的字符串是否以逗号分隔,同时它甚至转义作为字符串一部分输入的任何单引号。

为了转义单引号,只需输入一个反斜杠,后面跟着一个单引号,如:\ '作为字符串的一部分。我在这个例子中使用了jQuery验证器,您可以根据自己的方便使用。

有效字符串示例:

“你好”

“你好”、“世界”

‘你好’,‘世界’

‘你好’,‘世界’,‘’

“这是我的世界”,“没有我不能享受这一切”。,“欢迎,客人”

HTML:

<tr>
    <td>
        <label class="control-label">
            String Field:
        </label>
        <div class="inner-addon right-addon">
            <input type="text" id="stringField"
                   name="stringField"
                   class="form-control"
                   autocomplete="off"
                   data-rule-required="true"
                   data-msg-required="Cannot be blank."
                   data-rule-commaSeparatedText="true"
                   data-msg-commaSeparatedText="Invalid comma separated value(s).">
        </div>
    </td>

JavaScript:

     /**
 *
 * @param {type} param1
 * @param {type} param2
 * @param {type} param3
 */
jQuery.validator.addMethod('commaSeparatedText', function(value, element) {

    if (value.length === 0) {
        return true;
    }
    var expression = new RegExp("^((')([^\'\\\\]*(?:\\\\.[^\'\\\\])*)[\\w\\s,\\.\\-_\\[\\]\\)\\(]+([^\'\\\\]*(?:\\\\.[^\'\\\\])*)('))(((,)|(,\\s))(')([^\'\\\\]*(?:\\\\.[^\'\\\\])*)[\\w\\s,\\.\\-_\\[\\]\\)\\(]+([^\'\\\\]*(?:\\\\.[^\'\\\\])*)('))*$");
    return expression.test(value);
}, 'Invalid comma separated string values.');

可以使用escape()和unescape() jQuery方法。像下面,

使用转义(str);使用unescape(str_esc)转义字符串并再次恢复。

各位,在JavaScript中已经有了unescape函数,它对\"进行了unescape:

<script type="text/javascript">
    var str="this is \"good\"";
    document.write(unescape(str))
</script>

问题是HTML不识别转义字符。您可以通过对HTML属性使用单引号,对onclick使用双引号来解决这个问题。

<a href="#" onclick='DoEdit("Preliminary Assessment \"Mini\""); return false;'>edit</a>

“;在这个特殊的情况下,就像我之前建议的,因为HTML上下文。

然而,如果你想让你的JavaScript代码在任何上下文中独立转义,你可以选择原生JavaScript编码: '变成\x27 变成了\x22

所以你的onclick会变成:DoEdit('初步评估\x22Mini\x22');

例如,当将JavaScript字符串作为参数传递给另一个JavaScript方法时(alert()是一个简单的测试方法),这也可以工作。

我指的是重复的堆栈溢出问题,我如何转义一个onClick处理程序内的JavaScript代码中的字符串?