2012-01-20 6 views
0

エスケープされたJavaScript文字列のデコードに奇妙な問題があります。データ属性から文字列をデコードしないdecodeURIComponent

これはテストコードです。データ属性からエスケープされた文字列を取得しても機能しません。 2番目の例は正常に動作します。

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/

は、私は私が愚かな何かをやっていると確信している、しかし、あなたはdata-email-text属性の内側に置くことはjavascriptの文字列ではありません

+0

decodeURIComponentは赤ちゃんです。渡すデータは違っています:http://jsfiddle.net/wnegH/4/ – Douglas

+0

$( '#emaildata')。data( 'email-text ')はデコードする前にエンコードされていましたか? – Chibuzo

答えて

2

私は...何を尋することはできません。したがって、内部に\x27を使用すると、対応するASCII文字ではなく、そのままの文字列である\x27を意味します。

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

、その後:

は、ここでは、所望の効果を得ることができる方法のan example

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

もちろん、私はdata-email-text属性で使用している文字列は、上のencodeURIComponent機能を呼び出すことによって得られましたターゲット文字列

+0

もちろんです。私は何か愚かなことをしていることを知っていた。長い一日。 – johnwards

1

JavaScriptのエスケープシーケンス(\x27など)は、HTMLでは特別な意味を持ちません。代わりにcharacter referencesまたは実数を使用する必要があります。

関連する問題