যদি আমি করি
url = "http://example.com?p=" + urllib.quote(query)
- এটি সঙ্কেতাক্ষরে লিখা না
/করতে%2F(বিরতি OAuth এর নিয়মমাফিককরণ) - এটি ইউনিকোড পরিচালনা করে না (এটি একটি ব্যতিক্রম ছোঁড়ে)
এর চেয়ে ভাল গ্রন্থাগার কি আছে?
যদি আমি করি
url = "http://example.com?p=" + urllib.quote(query)
/করতে %2F(বিরতি OAuth এর নিয়মমাফিককরণ)এর চেয়ে ভাল গ্রন্থাগার কি আছে?
উত্তর:
দস্তাবেজগুলি থেকে :
urllib.quote(string[, safe])
% Xx এস্কেপ ব্যবহার করে স্ট্রিংয়ে বিশেষ অক্ষরগুলি প্রতিস্থাপন করুন। চিঠি, অঙ্ক এবং অক্ষর '_.-' কখনই উদ্ধৃত হয় না। ডিফল্টরূপে, এই ফাংশন URL.The ঐচ্ছিক নিরাপদ প্যারামিটার নির্দিষ্ট করে অতিরিক্ত অক্ষর পথ অধ্যায় যে উদ্ধৃত করা উচিত নয় উদ্ধৃত জন্য দেয়ার উদ্দেশ্যে করা হয় - তার ডিফল্ট মান '/'
তার অর্থ নিরাপদে '' পাস করা আপনার প্রথম সমস্যার সমাধান করবে:
>>> urllib.quote('/test')
'/test'
>>> urllib.quote('/test', safe='')
'%2Ftest'
দ্বিতীয় সমস্যা সম্পর্কে, সেখানে এটি সম্পর্কে একটি বাগ রিপোর্ট হয় এখানে । স্পষ্টতই এটি অজগর 3 এ স্থির করা হয়েছিল ut আপনি এটির মতো utf8 হিসাবে এনকোড করে এটির কাজটি করতে পারেন:
>>> query = urllib.quote(u"Müller".encode('utf8'))
>>> print urllib.unquote(query).decode('utf8')
Müller
যাইহোক urlencode এ একবার দেখুন
একই, urllib.quoteসঙ্গে প্রতিস্থাপন ছাড়া urllib.parse.quote।
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","যা urllib.quote এর সাথে কাজ করছে।
urllib.quoteurlib.parse.quoteপাইথন 3-এ স্থানান্তরিত হয়েছে ।
urllib.parse.quote ডক্স
পাইথন 3-এ, urllib.quoteসরানো হয়েছে urllib.parse.quoteএবং এটি ইউনিকোডটি ডিফল্টরূপে পরিচালনা করে।
>>> from urllib.parse import quote
>>> quote('/test')
'/test'
>>> quote('/test', safe='')
'%2Ftest'
>>> quote('/El Niño/')
'/El%20Ni%C3%B1o/'
quoteবিশ্বব্যাপী হিসাবে অস্পষ্ট। এটা তোলে urlencode ভালো কিছু ব্যবহার করতে সুন্দর হতে পারে: from urllib.parse import quote as urlencode।
urlencodeমধ্যে একটি ফাংশন রয়েছে যা urllib.parseইতিমধ্যে কিছু আলাদাভাবে কাজ করে, তাই আপনি অন্য কোনও নাম বাছাই করা বা আপনার কোডের ভবিষ্যতের পাঠকদেরকে গুরুতরভাবে বিভ্রান্ত করার ঝুঁকি নিয়ে থাকবেন।
আমার উত্তর পাওলো এর উত্তরের অনুরূপ।
আমি মনে করি মডিউলটি requestsআরও ভাল। এটা তোলে উপর ভিত্তি করে এর urllib3। আপনি এটি চেষ্টা করতে পারেন:
>>> from requests.utils import quote
>>> quote('/test')
'/test'
>>> quote('/test', safe='')
'%2Ftest'
requests.utils.quoteurllib.quoteপাইথন 2 এবং urllib.parse.quoteঅজগর 3
আপনি যদি জাঙ্গো ব্যবহার করছেন তবে আপনি urlquote ব্যবহার করতে পারেন:
>>> from django.utils.http import urlquote
>>> urlquote(u"Müller")
u'M%C3%BCller'
নোট করুন যে এই উত্তরটি প্রকাশিত হওয়ার পরে পাইথনে পরিবর্তনের অর্থ এই যে এখন এটি একটি উত্তরাধিকারী মোড়ক। Django.utils.http এর জন্য জ্যাঙ্গো ২.১ উত্স কোড থেকে:
A legacy compatibility wrapper to Python's urllib.parse.quote() function.
(was used for unicode handling on Python 2)
urlencodeএখানে ব্যবহার করা ভাল । একক প্যারামিটারের জন্য খুব বেশি পার্থক্য নেই তবে আইএমএইচও কোডটি আরও পরিষ্কার করে। (কোনও অনুষ্ঠানটি দেখে বিভ্রান্তিকর quote_plusলাগছে! বিশেষত যারা অন্যান্য নিচু থেকে আসে)
In [21]: query='lskdfj/sdfkjdf/ksdfj skfj'
In [22]: val=34
In [23]: from urllib.parse import urlencode
In [24]: encoded = urlencode(dict(p=query,val=val))
In [25]: print(f"http://example.com?{encoded}")
http://example.com?p=lskdfj%2Fsdfkjdf%2Fksdfj+skfj&val=34
urlencode: https://docs.python.org/3/library/urllib.parse.html#urllib.parse.urlencode
উদ্ধৃতি_প্লাস: https://docs.python.org/3/library/urllib.parse.html#urllib.parse.quote_plus