decodeURIComponent不解码数据属性中的字符串

时间:2012-01-20 21:50:58

标签: javascript

解码转义的javascript字符串时遇到了一个奇怪的问题。

这是测试代码,从data属性获取转义字符串不起作用它只是原始打印出来。第二个例子工作正常。

var emailText = $('#emaildata').data('email-text');
var unescapedEmailText = decodeURIComponent(emailText);
alert(unescapedEmailText);

var emailText2 = "Blah blah edit blah foo\x27\x0a\x0a\x0a\x27\x27\x27";
var unescapedEmailText2 = decodeURIComponent(emailText2);
alert(unescapedEmailText2);

这是一个显示功能损坏的jsfiddle。 http://jsfiddle.net/wnegH/2/

我确定我正在做一些愚蠢的事情,但我无法理解......

2 个答案:

答案 0 :(得分:2)

您在data-email-text属性中放置的内容不是javascript字符串。因此,在其中使用\x27,只是意味着\x27字符串按原样而不是相应的ASCII字符。

以下是an example如何达到预期效果:

<div id="emaildata" data-email-text="Blah%20blah%20edit%20blah%20foo'%0A%0A%0A'''"></div>

然后:

var emailText = $('#emaildata').data('email-text');
var unescapedEmailText = decodeURIComponent(emailText);
alert(unescapedEmailText);

显然,我在data-email-text属性中使用的字符串是通过调用目标字符串上的encodeURIComponent函数获得的。

答案 1 :(得分:1)

JavaScript转义序列(例如\x27)在HTML中没有特殊含义。您需要使用character references或真实字符。