JavaScript中的转义引号

2020/10/15 03:21 · javascript ·  · 0评论

我正在从数据库中输出值(它实际上并不开放给公众进入,但是它对公司用户开放,这意味着我不担心XSS)。

我正在尝试输出这样的标签:

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

description实际上是数据库中的值,如下所示:

Prelim Assess "Mini" Report

我曾尝试用“ \”替换“”,但是无论我如何尝试,Firefox都会在Assess一词后的空格后面不断切掉我的JavaScript调用,这会引起各种问题。

我必须忽略明显的答案,但是对于我的一生,我无法弄清楚。

有人指出我的愚蠢吗?

这是整个HTML页面(最终将是ASP.NET页面,但是为了解决这个问题,我除去了问题代码以外的所有内容)

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

您需要转义要写入的字符串,DoEdit以擦掉双引号字符。它们导致onclickHTML属性过早关闭。

\在HTML上下文中仅使用JavaScript转义字符,是不够的。您需要用适当的XML实体表示形式替换双引号&quot;

&quot; 由于存在HTML上下文,因此可以按照我之前的建议在这种特殊情况下工作。

但是,如果你希望你的JavaScript代码能够独立逃过任何情况下,你可以选择本地JavaScript编码:
'\x27
"\x22

因此,您的onclick将变为:
DoEdit('Preliminary Assessment \x22Mini\x22');

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

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

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

应该做到的。

伙计们,unescapeJavaScript中已经有功能可以对以下内容进行转义\"

<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>

基本上,这就是我的方法str.replace(/[\""]/g, '\\"')

var display = document.getElementById('output');
var str = 'class="whatever-foo__input" id="node-key"';
display.innerHTML = str.replace(/[\""]/g, '\\"');

//will return class=\"whatever-foo__input\" id=\"node-key\"
<span id="output"></span>

如果要用Java组装HTML,则可以使用Apache commons-lang中的这个不错的实用工具类来正确地进行所有转义:

org.apache.commons.lang.StringEscapeUtils
转义和取消转义Java,Java Script,HTML,XML和SQL的字符串。

我已经使用jQuery完成了一个示例

var descr = 'test"inside"outside';
$(function(){
   $("#div1").append('<a href="#" onclick="DoEdit(descr);">Click Me</a>');       
});

function DoEdit(desc)
{
    alert ( desc );
}

这适用于Internet Explorer和Firefox。

您可以复制这两个函数(在下面列出),并使用它们对所有引号和特殊字符进行转义/转义。您不必为此使用jQuery或任何其他库。

function escape(s) {
    return ('' + s)
        .replace(/\\/g, '\\\\')
        .replace(/\t/g, '\\t')
        .replace(/\n/g, '\\n')
        .replace(/\u00A0/g, '\\u00A0')
        .replace(/&/g, '\\x26')
        .replace(/'/g, '\\x27')
        .replace(/"/g, '\\x22')
        .replace(/</g, '\\x3C')
        .replace(/>/g, '\\x3E');
}

function unescape(s) {
    s = ('' + s)
       .replace(/\\x3E/g, '>')
       .replace(/\\x3C/g, '<')
       .replace(/\\x22/g, '"')
       .replace(/\\x27/g, "'")
       .replace(/\\x26/g, '&')
       .replace(/\\u00A0/g, '\u00A0')
       .replace(/\\n/g, '\n')
       .replace(/\\t/g, '\t');

    return s.replace(/\\\\/g, '\\');
}

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

为了转义单引号,只需输入反斜杠,然后在单引号后输入:\'作为字符串的一部分。我在此示例中使用了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.');

以及转义空白。在我看来,Firefox是采用三个参数而不是一个参数。 &nbsp;是不间断的空格字符。即使不是全部问题,也可能是个好主意。

您需要使用双反斜杠对引号进行转义。

这将失败(由PHP的json_encode产生):

<script>
  var jsonString = '[{"key":"my \"value\" "}]';
  var parsedJson = JSON.parse(jsonString);
</script>

这有效:

<script>
  var jsonString = '[{"key":"my \\"value\\" "}]';
  var parsedJson = JSON.parse(jsonString);
</script>

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

使用escape(str);逃脱串并再次使用恢复unescape(str_esc);

本文地址:http://javascript.askforanswer.com/javascriptzhongdezhuanyiyinhao.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!