web-dev-qa-db-ja.com

URL内のアンパサンドのエスケープ

アンパサンド付きの文字列を含むGETメッセージを送信しようとしていますが、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を手動で使用しているので、正しい文字が必要です。

私はライブラリを使うことができません。どうすればそれができますか?

167
tomermes

パーセントエンコードする必要があります。

> encodeURIComponent('&')
"%26"

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

http://www.mysite.com?candy_name=M%26M
292
Blender

をURLのアンパサンドにのみ適用しますが、すべての 予約文字には適用しません 。そのうちのいくつかは次のとおりです。

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

アイデアは、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パラメータの値全体をエンコードしました。改行やアンパサンドなどをそのままにするためにbodyおよびsubjectパラメータをエンコードする必要があるため、これはメッセージ本文または件名を持つmailto:リンクを使用する場合にも役立ちます。

予約セットからの文字(「予約文字」)が特定のコンテキストで特別な意味(「予約目的」)を持ち、URIスキームがその文字を他の目的に使用する必要があると言っている場合、その文字はパーセントエンコードする必要があります。予約文字をパーセントエンコードするには、その文字をASCII内の対応するバイト値に変換してから、その値を16進数のペアとして表します。エスケープ文字として使用されるパーセント記号( "%")が前に付いた数字は、予約文字の代わりにURIで使用されます。 (非ASCII文字の場合、通常はUTF-8でバイトシーケンスに変換され、各バイト値は上記のように表されます。)例えば、 "path"コンポーネントで使用されている場合、予約文字 "/" URIの場合、パスセグメント間の区切り文字であるという特別な意味があります。特定のURIスキームに従って、 "/"をパスセグメントに含める必要がある場合は、3つの文字 "%2F"または "%2f"を生の "/"ではなくセグメントに使用する必要があります。

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

34
Alex W

http://www.example.org?candy_name=M%26Mを使ってみてください。

ウィキペディアの this reference およびその他の情報 も参照してください

6
gkalpak

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

http://www.asciitable.com/ のASCII値の表。

&は16進数で26であることがわかります - したがって、M%26Mが必要です。

2
Peter Hull

誰かがPHPでそれを望んでいるなら、これは役に立つかもしれません

$variable ="candy_name=M&M";
$variable = str_replace("&", "%26", $variable);
1
Mohamed Ramadan

値のエンコードにライブラリを使用できない場合は、 http://www.urlencoder.org/ または )http://www.urlencode-urldecode.com/ または...

URL全体ではなく、「M&M」と入力してください。

0
Oliver

このencodeURIComponent関数を使用して引数を渡すことができるので、特殊文字を渡すことについて心配する必要はありません。

data: "param1=getAccNos&param2="+encodeURIComponent('Dolce & Gabbana') OR
var someValue = 'Dolce & Gabbana';
data : "param1=getAccNos&param2="+encodeURIComponent(someValue)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

0
nikhilmeth