2010-02-08 13 views
5

हम एक अजीब तर्क में भाग गए हैं जहां मैं काम करता हूं, और मैं इस पर गलत हो सकता हूं, इसलिए मैं पूछ रहा हूं।निर्देशिका नाम में अंडरस्कोर के साथ यूआरएल एन्कोडिंग?

हमारा सॉफ़्टवेयर एक अपाचे सर्वर पर एक निर्देशिका आउटपुट करता है जो निर्देशिका के नाम पर% 5F के साथ अंडरस्कोर को प्रतिस्थापित करता है।

उदाहरण के लिए यदि निर्देशिका का नाम हमारे सॉफ़्टवेयर में स्ट्रिंग के रूप में सूचीबद्ध किया गया था तो यह होगा: "andy_test", लेकिन तब जब सॉफ़्टवेयर अपाचे सर्वर पर निर्देशिका आउटपुट करता है, तो यह "एंडी% 5Ftest" बन जाएगा। दुर्भाग्यवश, जब आप सर्वर पर यूआरएल तक पहुंचते हैं तो यह "एंडी% 255Ftest" बन जाता है।

किसी तरह यह मेरे लिए गलत लगता है, एक बार फिर से प्रगति है:

  1. andy_test < - (सॉफ्टवेयर में एक स्ट्रिंग के रूप में)
  2. एंडी% 5Ftest < - (सर्वर पर एक निर्देशिका के रूप में सूचीबद्ध)
  3. एंडी% 255Ftest < -। (जब एक वेब ब्राउज़र से सर्वर पर एक URL के समान निर्देशिका बुला इस्तेमाल किया जाना चाहिए)

मैं assum हूँ आईएनजी "अंडर 5" अंडरस्कोर के लिए एन्कोडिंग है, और "% 25" "%" के लिए एन्कोडिंग है।

अब यह मुझे लगता है कि जिस तरह से निर्देशिका नाम सर्वर पर सूचीबद्ध होना चाहिए, वह केवल सादा औरyest होगा और यदि आप एक एन्कोडेड यूआरआई का उपयोग कर रहे थे तो शायद आप "एंडी% 5Festest" के साथ समाप्त हो जाएंगे अपाचे सर्वर पर निर्देशिका का उपयोग करें।

मैं इसके बारे में बैकएंड पर लोगों ने पूछा, और उन्होंने कहा कि वे सिर्फ थे: "कुछ भी है कि एक पत्र या एक नंबर नहीं था एन्कोडिंग

तो मुझे लगता है कि मैं थोड़ा इस पर संदेह में हूँ।। आप मुझे बता सकते हैं, जो सही है, और मुझे क्यों बारे में कुछ जानकारी के लिए प्रत्यक्ष

उत्तर

9

आपको निर्देशिका नामों को एन्कोड नहीं करना चाहिए जैसा कि आप उन्हें बनाते हैं (जैसा आपने सुझाव दिया था)। एन्कोडिंग केवल अंतिम चरण में होनी चाहिए जहां इसे ब्राउज़र को सौंप दिया जाता है। Thats क्यों आप 'डबल' एन्कोडिंग के साथ समाप्त हो रहे हैं:% 25% है और 5F अंडरस्कोर के पहले एन्कोडिंग से बचे हुए है।

Btw, तुम वैसे भी रेखांकित एन्कोड करने के लिए (मैं rfc1738 के अनुसार लगता है) की जरूरत नहीं है।

2.2।यूआरएल वर्ण एन्कोडिंग मुद्दे

...

इस प्रकार, केवल अक्षर या अंक, विशेष वर्ण "$ -_। +! * '(),", और सुरक्षित उनके आरक्षित उद्देश्यों के लिए इस्तेमाल पात्रों इस्तेमाल किया जा सकता एक यूआरएल के भीतर unencoded।

+1

आरएफसी संदर्भ के लिए भी धन्यवाद! – leeand00

3

वहाँ डबल एन्कोडिंग तुम क्या दिखा रहे हैं में क्या हो रहा है दो चरणों पर्याप्त होना चाहिए:?।

andy_test दोनों सॉफ्टवेयर में स्ट्रिंग है और फाइल सिस्टम में निर्देशिका या स्क्रिप्ट का वास्तविक नाम (संसाधन वेब सर्वर का उपयोग करता है)

andy%5Ftestandy_test यूआरएल एन्कोडेड है। इस स्ट्रिंग को ब्राउज़र का उपयोग करना चाहिए (यह अंडरस्कोर मामले में वास्तव में आवश्यक नहीं है, लेकिन अन्य मामलों में हो सकता है)।

andy%255ftest सिर्फ andy_test यूआरएल दो बार एन्कोड किया गया है, जिसका कोई मतलब नहीं है, इसकी आवश्यकता नहीं होनी चाहिए। बस यह तय करें कि आप एन्कोडिंग कहां करेंगे। यदि आप इसे कोड स्तर पर और वेबसर्वर स्तर पर करते हैं तो यह हो सकता है कि परिणाम क्या हो सकता है और नतीजा तब तक टूटा हुआ लिंक है जब तक आप दो बार फिर से डीकोड नहीं कर रहे हैं, जिसकी वास्तव में आवश्यकता नहीं है और न ही सचेत है।

+0

मैंने सॉफ्टवेयर के लिए बैकएंड नहीं लिखा था, मैं बस बैकएंड से लोगों को मनाने की कोशिश कर रहा हूं कि कुछ गलत किया गया है। – leeand00

+0

@ लींड 00: यह स्पष्ट होना चाहिए कि दो बार एक काम करना गलत है। लक्ष्य यह निर्धारित करना चाहिए कि एन्कोडिंग करने के लिए सबसे अच्छी जगह कहां है और इसे केवल वहां करें (दो बार नहीं)। –

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