2010-03-12 7 views
5

मेरे पास एक ऐसी वेबसाइट है जो फेसबुक, ट्विटर, स्वादिष्ट शेयर लिंक का उपयोग करती है। उनमें वेबसाइट का यूआरएल एन्कोडेड यूआरएल होता है जिसे आप साझा करना चाहते हैं। समस्या यह है कि मैं एक PHP रीडायरेक्ट पेज के माध्यम से फेसबुक/ट्विटर/स्वादिष्ट यूआरएल भेजना चाहता हूं।क्या यूआरएल एन्कोडेड यूआरएल युक्त यूआरएल को यूआरएलएनकोड करना संभव है?

यह एक इनकोडिंग यूआरएल के भीतर एक यूआरएल एन्कोड करने के लिए काम करेगा? क्या दुष्प्रभाव होंगे?

मेरे सवाल का सरल करने के लिए:

www.website.com/redirect.php?url=" URLENCODED (http://www.facbook.com/sharer.php?t='URLENCODED(title)'&u='URLENCODED(http://www.hotel.com)') 
+0

प्रत्यावर्तन समझने के लिए, एक पहले प्रत्यावर्तन को समझना चाहिए। –

उत्तर

9

आप प्रतिशत एन्कोडिंग के साथ एक स्ट्रिंग कई बार सांकेतिक शब्दों में बदलना और यह समय की एक ही राशि डिकोडिंग द्वारा मूल मूल्य प्राप्त कर सकते हैं:

$str = implode(range("\x00", "\xFF")); 
var_dump($str === urldecode(urldecode(urldecode(urlencode(urlencode(urlencode($str))))))); 

यहाँ $str का मान तीन बार एन्कोड किया गया है और फिर तीन बार डीकोड किया गया है। उस दोहराए गए एन्कोडिंग और डिकोडिंग का आउटपुट $str के मान के समान है।

तो यह प्रयास करें:

'http://example.com/redirect.php?url='.urlencode('http://www.facbook.com/sharer.php?t='.urlencode('title').'&u='.urlencode('http://www.hotel.com')) 
+0

मैं समझता हूँ कि यह कैसे ... मैं सिर्फ चिंतित एक urlencoded यूआरएल urlencoding के कारण हो सकता है कि यह रीडायरेक्ट पृष्ठ पर पूरे यूआरएल डीकोड किया जा रहा था करने के लिए ... तो मैं नेस्टेड यूआरएल encodes ग्रहण करने के लिए कर रहा हूँ ठीक काम करेंगे? – Mark

+0

@ गंबो ने कहा: "आप एक बार कई बार एन्कोड कर सकते हैं और इसे उसी समय डीकोड करते समय मूल मान प्राप्त कर सकते हैं"। प्रत्येक बार जब आप एन्कोड करते हैं, तो पहले से सभी एन्कोड किए गए हिस्सों को एन्कोड किया जाता है * फिर * – Josh

+1

@ मार्क: तो यदि आप अभी भी उलझन में हैं, तो, रीडायरेक्ट यूआरएल पूरे यूआरएल को डीकोड नहीं करेगा, यह सिर्फ एक "स्तर" को हटा देगा एन्कोडिंग। आपकी योजना ध्वनि है, दूसरे शब्दों में। – Josh

1

यह URLEncoding की दूसरी परत को जोड़ने के लिए सब ठीक है। URLEncoding का विचार सर्वर को टेक्स्ट स्ट्रिंग में मौजूद किसी विशेष वर्ण को गलत व्याख्या करने से रोकने के लिए है। हालांकि, प्राप्त करने वाली स्क्रिप्ट को urlencode() की एक अतिरिक्त परत की अपेक्षा करनी चाहिए, और तदनुसार कार्य करना चाहिए।

या यदि आप जानते हैं कि स्ट्रिंग urlencoded कर दिया गया है, तो आप बस इसे पारित नहीं कर सकता है के साथ के रूप में है? आगे कोई urlencoding आवश्यक है।

3

आप रिकर्सिवली यूआरएल एन्कोड करने के लिए के रूप में कई बार के रूप में आप चाहते हैं सक्षम होना चाहिए। आप की तरह/एक चरित्र सांकेतिक शब्दों में बदलना है, तो बार-बार आप मिल जाएगा:

0:/
1: %3F 
2: %%3F 
3: %%%%3F 

आदि

+0

एन्कोड ('?') =% 3 एफ। साथ ही, पुनरावर्ती एन्कोडिंग के बाद, एकमात्र भाग फिर से एन्कोड हो रहा है '%' है, इसलिए यह '% 2525253F' जैसा होता है, जहां डीकोड ('% 25') =% –

0

या सिर्फ शीर्षक और URL, तो पूरी स्ट्रिंग urlencode urldecode।

0

जैसा कि बताया जा पहले के रूप में आप की तरह आप के रूप में ज्यादा यूआरएल सांकेतिक शब्दों में बदलना कर सकते हैं लेकिन आप अधिक बार आप सांकेतिक शब्दों में बदलना यूआरएल डेटा अधिक यह लंबाई में वृद्धि करेंगे पता लंबाई में दो दो बार हो सकता है चाहिए। जो उपयोगकर्ताओं के लिए परेशान होगा यदि यह बहुत लंबा है। कुछ ब्राउज़रों पर यूआरएल लंबाई पर भी सीमा हो सकती है। सर्वर पक्ष पर भी एक ओवरहेड एन्कोडिंग और डेटा डीकोडिंग होगा। संक्षेप में आपको वास्तव में यह सुनिश्चित करना चाहिए कि आपको कई बार एन्कोडिंग/डिकोडिंग से पहले इसकी आवश्यकता हो।