2016-12-07 24 views
0

uglifyJSは、エスケープされた二重引用符を一重引用符文字列で無視します。二重引用符をエスケープしない

'test " + foo + "' 

'test \" + foo + \"' 

結果これは単に間違っている動作です。

私は.jsを縮小したいので、このデータはJSONに入れなければなりません。しかし、JSON APIはこのようにする必要があります。

{ 
    string: "test \" + foo + \"" 
} 

ない

{ 
    string: "test " + foo + "" 
} 

は、それは私が私のjavascriptをuglify現時点で\"

を無視していないことug​​lifyJSを設定し、すべての私の\"プレースホルダと交換する方法はあります。その後、すべてのプレースホルダーを置き換える文字列を使用して作業を開始します。 しかし、私のテストはうまくいきません。

EDIT:Javascriptのuglifyバージョンも同様JSON、有効なJavascript有効にする必要があります。

EDIT:実際の例の一部です。このコードはuglifiedされてからJSONに入れなければなりません。

var privacylink = '#privacyButtonURL#'; 
link = '<a href=\"' + privacylink + '\" target=\"_blank\" style=\"color:#4398b5; text-decoration:underline;\">hear</a>'; 

uglifyバージョンでは、これは動作しないでしょう

var a="#privacyButtonURL#", b='<a href="'+a+'" target="_blank" style="color:#4398b5; text-decoration:underline;">hear</a>' 

だろう。

JSON.stringify('var a="#privacyButtonURL#", b='<a href="'+a+'" target="_blank" style="color:#4398b5; text-decoration:underline;">hear</a>'') 
+3

「このちょうど間違った行動です " - そうではありません。 JavaScriptでは、この文脈では、2つのステートメントはまったく同じことを意味します。あなたの問題は、JSの特定の書式設定に依存しているため、JSONをストリングを一緒にマッシュすることで構築できることです。代わりに適切なJSONライブラリを使用してください。 – Quentin

+1

'JSON.stringify({string: 'test" + foo + "'})' – coyotte508

+0

これは問題ではありません。バックエンドに送ろうとしている '.js'を動的に作成します。私のバックエンドのAPIはJSONだけです。だから、 '.js'を文字列として有効なJSONを送信します。しかし、この '.js'文字列では、別の方法で二重引用符をエスケープする必要があります。 – DK1990

答えて

0

引用形式についてはgithub issueです。

{ output: { quote_style: 3 } } 

$ echo "console.log(\"foo\",'bar');" | uglifyjs --quotes=1 
console.log('foo','bar'); 

$ echo "console.log(\"foo\",'bar');" | uglifyjs --quotes=2 
console.log("foo","bar"); 

$ echo "console.log(\"foo\",'bar');" | uglifyjs --quotes=3 
console.log("foo",'bar'); 

それともゴクゴクと

は、 uglify.minify()関数にパラメータとして以下の与える:

上記のリンクで与えられた解決策は、元の引用形式を維持するためにuglify伝えることです具体的な問題については、不要なエスケープ文字を(JavaScriptで)保持するかどうかわからないため、解決策は次のようになります。

  • あなたのjavascriptのコードは、単一引用符を持たなければならない場合は{string: JSON.stringify(code)}

を行う上記のオプション

  • でコードをuglify
  • 必要
  • を二重引用符にすべてを切り替えることにより、JavaScriptからすべての単一引用符を削除し、どこにそれらをエスケープ何らかの理由で、代わりにjavascriptコードの生成されたhtmlの二重引用符を &#34;または &quot;で置き換えることができます。

    最初にvar a = 'abc \" def';のようなものが有効なjavascriptであるとは思わないことに注意してください。

    ファイルをどのようにインクルードするか(これは言及していません)、おそらくファイルを文字列に直接ロードするより良い方法があります。JSON.stringify()を呼び出すことができます。

    編集

    あなたは最近のJavaScriptエンジンを使用している場合、また、あなたのコード内でbackquotesを( `)を使用し、それらによって、二重引用符または一重引用符を置き換えることができます。

    または、何$やバッククォートがあなたのjavascriptのコードではありませんならば、あなたは、単に行うことができます。

    { 
        string: JSON.stringify(`uglified javascript code`) 
    } 
    
    1

    あなたが欲しい:

    'test \\" + foo + \\"' 
    

    参照: http://es5.github.io/#x7.8.4

    +0

    これでjavascriptを醜くすると、それはもはや有効なjavascriptではありません。 – DK1990

    関連する問題