2012-01-09 9 views
1

URLVariables変数名にアンダースコアを使用することはできますか?たとえば、次のコードは "my_username = foo"の代わりに "my%5Fusername = foo"を出力します。AS3:URLVariables変数名にアンダースコアを使用する

import flash.net.URLVariables; 
var variables : URLVariables = new URLVariables("my_username=foo"); 
trace(variables.toString()); 

トレースと同様に、要求のアンダースコアの代わりに "%5F"が表示されます。代わりにアンダースコア文字を表示する方法はありますか?

答えて

1

単にURLVariablesクラスを使用しないでください。他のことも間違っていることが知られています。 This URL RFCは、アンダースコアを特殊文字と呼び、英数字と同じカテゴリに配置し、エンコーディングが不要であることを示します。 This RFCは、変数を "query"とする部分を呼び出し、pcharを下線文字を含むものとしてpcharを割り当てます。

実際には、アンダースコア文字を含むURIはブラウザやサーバーに問題を与えていないようですので、エンコードするのは間違いです。

EDIT:これはむしろ望ましくない動作であり、間違い(URI正規化子はエンコードされたアンダースコアを元のように元に戻すことを知っているでしょう)のように見えますが、エンコードのアンダースコアはエンコードと同じです英語のアルファベットの手紙 - 無駄で愚か。

+1

私は最初の段落でクレームを修正するための編集を提案しましたが、それはまったく真実ではありませんでした。基本的な文字セットをエンコードする必要はありませんが、確かにできます*。一方、引用符で囲まれたRFCから、「予約された目的に使用されていない限り、エンコードされる必要のない文字(英数字を含む)は、URLのスキーム固有の部分にエンコードされる可能性があります。 " – iND

0

trace(unescape(variables.toString()));

+0

@ Anonymous1がURLで 'variables'を使用しようとしていて、アンダースコアを戻すだけの場合、' unescape() 'は間違っています。スペース、アンパサンド、パーセント記号などもASCIIに変換します。これらはURLを無効にします。アンダースコアは[URL specs](http://www.w3.org/Addressing/)の一部であるため、変換は許可されており、変換はアンダースコアの文字列に限定する必要があります。 – iND

+0

@iND:彼は変数名に他の文字を使用せず、アンダースコアのみを使用しています。彼は、エスケープされた/エンコードされたキャラクターの代わりにアンダースコアを使用してトレースしたいというOPの状態を示しています。私はunescape()の出力に何も設定していないので、URLを壊していません。 – ToddBFisher

+0

あなたは 'variables'オブジェクトの* rest *について仮定しています:' variables'オブジェクト全体を解答からエスケープしています。我々は単純で集中的な例しか与えられておらず、 'unescape()'は 'URLRequest'の' data'での一般的な解決策ではありません。 – iND

1

regular expression使用すると、出力がアンダースコアに変換することができます。この方法では、という事実を利用します:

  1. URLRequestdata変数は、一般的なObject
  2. StringtoString()replace()Object
  3. 出力はStringオブジェクト3.

あるさコード:

var url:String = "http://www.[yourDomain].com/test"; 
var request:URLRequest = new URLRequest(url); 
var variables:URLVariables = new URLVariables("my_user_name=f_o_o"); 

// add some more variables: 
variables.exampleSessionId = "test"; 
variables.example_Session_Id2 = "test2"; 

// set up the search expression: 
var undPatrn:RegExp = /%5f/gi; 

trace("Without '_': " + variables.toString()); 
trace("With '_': " + variables.toString().replace(undPatrn, "_")); 
trace(variables); 

// navigate with %5f:  
request.data = variables.toString(); 
navigateToURL(request); 

// navigate with underscore:  
request.data = variables.toString().replace(undPatrn, "_"); 
navigateToURL(request); 
+0

私はURLVariablesを使用していませんでしたが、この回答も役に立ちました。ありがとう! – Anonymous1

関連する問題