2012-07-03 6 views
9

私はpythonでurllib.url_encodeの問題に直面しています。ベットはいくつかのコードで説明されています:pythonでurl_encodeのパイプ(|)記号をエスケープする方法

>>> from urllib import urlencode 
>>> params = {'p' : '1 2 3 4 5&6', 'l' : 'ab|cd|ef'} 
>>> urlencode(params) 
'p=1+2+3+4+5%266&l=ab%7Ccd%7Cef' 

lパラメータにパイプ( '|')を入れたいと思います。どのように教えてくれますか?

結果は

'p=1+2+3+4+5%266&l=ab|cd|ef' 

PSでなければなりません:私は手動で一緒にURLを入れたいが、そのためでurlencodeを使用しないでください。

おかげ-Pat

+0

、あなたは、そのような単純なURLエンコードされていません。 – Wrikken

+9

urlencodeそして '%7C'を' | ' – TheZ

+0

に置き換えます。基本的にURLエンコードしてエンコードの一部を元に戻したいのですか?なぜあなたはURLエンコードするのですか?パイプシンボルを持つURLは問題を引き起こす可能性があります。 (http://stackoverflow.com/questions/11298404/the-connection-was-reset-asp-net) – chiccodoro

答えて

13

マッピングオブジェクトまたは 「パーセントエンコードされた」文字列に2つの要素のタプルのシーケンスを変換する[...]

urlencode()方法があります期待どおりの行動。エンコードを防止したい場合は、最初にオブジェクト全体をエンコードし、エンコードされた文字をパイプで置き換えることができます。

>>> u = urlencode(params) 
>>> u.replace('%7C', '|') 
'p=1+2+3+4+5%266&l=ab|cd|ef' 
+0

私は| \を付けて|またはurlencodingする前に何かがworする必要がありますが、あなたの解決策もOKです。 Thanks – wzr1337

+0

標準のエスケープ文字「\\」を追加すると%5Cに変換されます。それを解決する唯一の方法は、コード化された後で置き換えることです。 – RobB

1

これは、Python 3で簡単です:あなたはそこにパイプが必要な場合は

urllib.parse.urlencode(params, safe='|') 
関連する問題