2013-05-18 30 views
119

アンパサンドの文字列を含むGETメッセージを送信しようとしていますが、URLのアンパサンドをエスケープする方法がわかりません。URLのアンパサンドをエスケープする

例:

http://www.example.com?candy_name=M&M 
result => candy_name = M 

私も試してみました:

http://www.example.com?candy_name=M\&M 
result => candy_name = M\\ 

私は、正しい文字を必要とするので、私は手動でURLを使用しています。

ライブラリは使用できません。どのようにそれを行うことができますか?彼らは、パーセントエンコードする必要が

答えて

219

> encodeURIComponent('&') 
"%26" 

は、だからあなたの場合には、URLは次のようになります。

http://www.mysite.com?candy_name=M%26M 
+1

: - %26は私のために働いていません。他の解決策はありますか? – Sanjiv

+0

@サンジ:「働いていない」とはどういう意味ですか? – Blender

+1

&を%26に置き換えたときに、同じエラーが表示される - クライアントとの間で潜在的に危険なRequest.Path値が検出されました。 – Sanjiv

5

http://www.mysite.com?candy_name=M%26Mを使用してみてください。

もこのreferencewikipedia上のいくつかの詳細情報を参照してください。

2

URLに許可されていない「エスケープ」文字に%文字を使用できます。 RFC1738を参照してください。

ASCII値のテーブルはここにある:http://www.asciitable.com/

あなたは&ヘクスで26ある見ることができます - ので、あなたが必要なもの。これはは、URLのアンパサンドにのみ適用されませんMの%の26M

27

ですしかし、すべてreserved charactersに。そのうちのいくつかは、次のとおり

# $ & + ,/: ; = ? @ [ ] 

アイデアは、HTML文書内&をコードと同じであるが、コンテキストは、HTML文書内にあることに加えて、URI内であることに変更されました。したがって、パーセントエンコーディングは、両方のコンテキストの内部での解析での問題を防ぎます。

これが便利な場所は、別のURLの中にURLを入れる必要がある場所です。あなたはTwitterのステータスを投稿したい場合たとえば、:

http://www.twitter.com/intent/tweet?status=What%27s%20up%2C%20StackOverflow%3F(http%3A%2F%2Fwww.stackoverflow.com) 

あり、私のツイートでの予約文字がたくさん、すなわち?'():/ですので、私はstatus URLパラメータの値全体をコードしていました。これは、bodysubjectパラメータをエンコードして改行、アンパサンドなどをそのまま維持する必要があるため、メッセージ本文または件名を持つmailto:リンクを使用する場合にも役立ちます。予約されたセット(「予約文字」)からの文字が特定のコンテキストで 特別な意味(「予約済みの目的」)を有する、およびURI スキームが、その文字を使用する必要があると述べている

他のいくつかの目的のためには、文字はパーセント符号化されていなければなりません。パーセンテージエンコーディング 予約文字には、文字をASCIIの対応するバイト値の に変換し、その値を の16進数のペアで表すことが含まれます。エスケープ文字として使用されるパーセント記号 ( "%")で始まる数字は、予約文字の代わりにURI で使用されます。 (ASCII以外の文字の場合は、 が通常はUTF-8でバイトシーケンスに変換され、次に各バイトの の値が上記のように表されます) の予約文字 "/"は、 URIの「パス」コンポーネントには、パスセグメント間の区切り文字であることを意味する特別な意味があります( )。 のURIスキームに従って、 "/"をパスセグメントに含める必要がある場合は、 "/"ではなく、 "%2F"または "%2f"という文字3個を使用する必要があります。

http://en.wikipedia.org/wiki/Percent-encoding#Percent-encoding_reserved_characters

+2

上記のリストの中で、 '! '()* 'は' encodeURIComponent'を使ってURLエンコードされていません。 –

0
// this may help if someone want by php 
$variable ="candy_name=M&M"; 
$variable = str_replace("&","%26",$variable);