2012-07-11 16 views
12

आदर्श रूप से मुझे example.com/resources/äFg4вNгё5 जैसे कुछ चाहिए, की संख्या वर्णों की संख्या, कभी भी ध्यान न रखें कि उन्हें HTTP पर ट्रांसमिट करने से पहले प्रतिशत एन्कोड किया जाना चाहिए।यूआरएल सुरक्षित यूआईआईडी अक्षरों की सबसे छोटी संख्या में

क्या आप ऐसी योजना बता सकते हैं जो 128b यूयूआईडी को कम से कम दृश्यमान वर्णों में कुशलता से प्रदर्शित करता है, बिना परिणाम वाले यूआरएल तोड़ने वाले परिणाम?

+2

अंतर्राष्ट्रीय वर्ण अभी भी कीड़े का एक छोटा सा हिस्सा हैं; यह ब्राउज़र में हमेशा काम कर सकता है, लेकिन यदि आप मेल क्लाइंट, एक त्वरित संदेशवाहक, या सबसे नाजुक मामला, एसएमएस, जैसे विभिन्न अनुप्रयोगों में कॉपी-पेस्टिंग कर रहे हैं, तो वे टूट जाएंगे। उत्तर द्वारा सुझाए गए बेस 64 अभी भी सबसे अच्छा तरीका है जब तक कि आप खतरनाक धारणा न करें कि उपयोगकर्ता एक ही वेब ब्राउज़र के बाहर इन लिंक का उपयोग नहीं करेंगे। – Ekevoo

उत्तर

15

बेस -64 इस के लिए अच्छा है।

{098ef7bc-a96c-43a9-927a-912fc7471ba2} 

इनकोडिंग जा सकता है के रूप में

vPeOCWypqUOSepEvx0cbog 

अंत में हमेशा की तरह बराबर-संकेत गिरा दिया जा सकता है, के रूप में वे हमेशा स्ट्रिंग-लंबाई 4. और + और / के बजाय की एक बहु बनाने के लिए, आप कुछ सुरक्षित पात्रों का उपयोग कर सकते हैं। -._~

अधिक जानकारी::

4
आप से दो चुन सकते हैं

मैं एक यूआरएल-सुरक्षित बेस 64 स्ट्रिंग का उपयोग करता हूं। निम्नलिखित कुछ पायथन कोड है जो यह * करता है।

अंतिम पंक्ति '=' या '==' संकेत देती है कि आधार 64 एन्कोडिंग अंत में डालना पसंद करती है, वे पात्रों को एक URL में अधिक कठिन बनाते हैं और केवल जानकारी को डी-एन्कोडिंग के लिए आवश्यक होते हैं, यहां करने की आवश्यकता नहीं है।

import base64 
import uuid 

# get a UUID - URL safe, Base64 
def get_a_Uuid(): 
    r_uuid = base64.urlsafe_b64encode(uuid.uuid4().bytes) 
    return r_uuid.replace('=', '') 

* यह मानकों का पालन करता है: base64.urlsafe_b64encode आरएफसी 3548 और 4648 https://docs.python.org/2/library/base64.html देखने के इस प्रकार है। ज्ञात लंबाई के साथ बेस 64 एन्कोडेड डेटा से == स्ट्रिपिंग को RFC 4648 §3.2 देखें। यूयूआईडी/GUID RFC 4122 में निर्दिष्ट हैं; §4.1 Format कहता है "यूयूआईडी प्रारूप 16 ऑक्टेट्स है"। base64 -फ्यूशन इन 16 ऑक्टेट्स को एन्कोड करता है।

+2

पायथन 3 के साथ काम नहीं करता है, आपको इसके बजाय उपयोग करना चाहिए: 'base64.urlsafe_b64encode (uuid.uuid4() बाइट्स)। स्ट्रिप (" = ")' (पाइथन 2 में भी काम करता है, यूनिकोड स्ट्रिंग देता है)। –

संबंधित मुद्दे