यूआरएल सुरक्षित आधार 64 एन्कोडिंग को देखने में, मुझे यह एक बहुत ही गैर-मानक चीज़ माना गया है। PHP में किए गए कार्यों में निर्मित संख्या की संख्या के बावजूद, यूआरएल सुरक्षित बेस 64 एन्कोडिंग के लिए कोई नहीं है।बेस 64 एन्कोडिंग यूआरएल सुरक्षित बनाने के लिए कौन सा चरित्र प्रतिस्थापन किया जाना चाहिए?
function base64_url_encode($input)
{
return strtr(base64_encode($input), '+/=', '-_,');
}
केवल पर्ल मॉड्यूल मैं इस क्षेत्र में मिल सकता है MIME::Base64::URLSafe (source) है, जो निम्नलिखित प्रतिस्थापन आंतरिक रूप से करता है: base64_encode()
के लिए मैनुअल पृष्ठ पर, टिप्पणी के सबसे कि समारोह, strtr()
साथ लिपटे उपयोग करने का सुझाव:
sub encode ($) {
my $data = encode_base64($_[0], '');
$data =~ tr|+/=|\-_|d;
return $data;
}
ऊपर पीएचपी समारोह के विपरीत, इस पर्ल संस्करण बल्कि साथ ',' (अल्पविराम) पीएचपी करता है के रूप में यह जगह की तुलना में पूरी तरह से '=' (के बराबर होती है) चरित्र चला जाता है,। बराबर एक पैडिंग चरित्र है, इसलिए पर्ल मॉड्यूल उन्हें डीकोड पर आवश्यकतानुसार बदल देता है, लेकिन यह अंतर दो कार्यान्वयन को असंगत बनाता है।
from base64 import urlsafe_b64encode, urlsafe_b64decode
def uri_b64encode(s):
return urlsafe_b64encode(s).strip('=')
def uri_b64decode(s):
return urlsafe_b64decode(s + '=' * (4 - len(s) % 4))
इच्छा यहां है:
अंत में, अजगर समारोह urlsafe_b64encode(s) गद्दी जो 'python base64 url safe' के लिए गूगल परिणामों में मुख्य रूप से पता चलता दूर करने के लिए this function ऊपर डाल करने के लिए '=' चारों ओर गद्दी रहता है, कोई उत्साह एक स्ट्रिंग जिसे बिना किसी एन्कोडिंग के यूआरएल में शामिल किया जा सकता है, इसलिए पात्रों '+', '/', और '=' के डायचिंग या अनुवाद। चूंकि कोई परिभाषित मानक नहीं है, सही तरीका क्या है?
यह वर्णों की एक अनावश्यक संख्या का उपयोग करता है। क्यों पहली जगह बाइनरी स्ट्रिंग urlencode नहीं? – recursive