2017-04-25 30 views
0

バックスラッシュのエスケープに関するいくつかの問題に直面しています。以下は、私が試したコードスニペットです。問題は、エスケープされたスラッシュを持つ変数を別の変数に割り当てる方法です。私はoptionsオブジェクトを印刷していたときにNodeJSバックスラッシュをエスケープする

var s = 'domain\\username'; 
var options = { 
    user : '' 
}; 
options.user = s; 

console.log(s); // Output : domain\username - CORRECT 
console.log(options); // Output : { user: 'domain\\username' } - WRONG 

なぜ両方スラッシュが来ていますか?

ここでは、私が本当に/間違って何かをしている気がしていましたが、これは基本的かもしれません。

更新:

私はそれが(ダブルスラッシュで)であるとして値を通過している、と私は私のSOAPサービスでこれを使用すると、無効なユーザーのプロパティ値に401エラーを取得しています。このオブジェクトoptionsを使用しています。

しかし、同じユーザー値を使用して同じコードを試したところ、適切な応答が得られました。また、PHPでは値を2つのスラッシュでエスケープしています。

+0

ほとんどの場合、コンソールは文字列をエスケープしています。 –

+0

@JanDvorakありがとう、本当に申し訳ありませんが、正確にあなたを得ることはありませんでした。 – Dipak

+0

コードは正しいですか?これを実行すると、オプションに 'wsdl_headers'が存在しないため、エラーが表示されます。 – user3432422

答えて

2

出力が正しいです。

変数を設定すると、エスケープされたバックスラッシュは1つのコードポイントに解釈されます。

しかし、optionsは、ログに記録されたときにJSONブロブとして表示されるオブジェクトです。バックスラッシュはJSON出力内の文字列値として有効に表示される唯一の方法であるため、この時点でバックスラッシュが再エスケープされます。

JSON出力をconsole.log(options)からjavacript(JSON.parse()などを使用)に再読み込みしてユーザーキーを出力すると、バックスラッシュは1つのみ表示されます。質問の編集:)続き

あなたのデータはSOAPを消費サービスによって受け入れられるようにするために、データを明示的にバンドエスケープする必要があることも可能です。このケースでは、値を割り当てるときにそれをダブルエスケープする必要があります。

var s = 'domain\\\\user' 

決定的にあなたがこれを行うかする必要があるかどうかを決定するために、私はあなたがあなたの作業PHPアプリの間でプロキシを置くことをお勧めしたいとSOAPアプリケーションを実行し、トラフィックを検査します。

+0

ありがとう、更新された質問を確認してください。 – Dipak

+0

消費SOAPサービスに言及した質問の編集を反映するように更新されました。 – Benjamin

2

オブジェクトがconsole.log()の場合、最初にutil.inspect()を使用して文字列に変換されます。 util.inspect()は文字列プロパティ値をリテラルとしてフォーマットします(JSON.stringify(s)のように)。文字列(制御文字を含む可能性があります。\n)をより簡単に/正確に表示します。その際、有効なJavascript文字列になるように文字列内の特定の文字をエスケープする必要があります。そのため、コード内にバックスラッシュがエスケープされていることがわかります。

+0

ありがとうございますが、データがそのまま渡され、401エラーをスローするので、APIサービスで '\\'の値を持つオブジェクトをどのように使用しますか。 – Dipak

+0

すでにバックスラッシュを正しくエスケープしています。 APIエラーステータスの理由は他の場所にある可能性が最も高いです。 – mscdex

+0

しかし、 'API'オブジェクトは' value'で 'エラー応答'メッセージを返すので、 'userプロパティ 'の値に' two slash'があります。しかし、同じユーザ値を使って 'PHPコード 'で同じことを試してみたところ、PHPでは適切な応答が得られました。また、' two slashes'で値をエスケープしています。 – Dipak

関連する問題