2010-05-14 9 views

उत्तर

27

आप

  • explode उपयोग कर सकते हैं पथ के सेगमेंट में अपने पथ विभाजित करने के लिए,
  • array_map प्रत्येक आइटम पर rawurlencode लागू करने के लिए (urlencode का उपयोग नहीं करते, कि केवल application/x-www-form-urlencoded encoded के लिए है क्वेरी तर्क!), और
  • implode सेगमेंट को एकसाथ वापस रखने के लिए।

तो सब एक साथ एक पंक्ति में:

$path = implode('/', array_map('rawurlencode', explode('/', $path))); 
+0

यह करने का सबसे संकल्पनात्मक सही तरीका होगा, हालांकि व्यवहार में 'str_replace' आसान होगा। 'Rawurlencode' के लिए किसी भी तरह से +1; यह हमेशा सही बात है, जबकि 'urlencode' कभी-कभी गलत बात होती है। – bobince

14

उन्हें फिर से बदलें:

str_replace('%2F', '/', urlencode('/this/is/my/file right here.jpg')); 

ध्यान दें कि यदि आप एक क्वेरी स्ट्रिंग में परिणाम पारित करने के लिए जा रहे हैं, आप ऊपर प्रतिस्थापन ऐसा नहीं करना चाहिए - केवल urlencode का उपयोग । यदि आप इसे पथ भाग में उपयोग कर रहे हैं, तो आपको इसके बजाय rawurlencode का उपयोग करना चाहिए।

+0

यह एक बहुत अच्छा लग रहा है। मुझे लगता है कि चयनित उत्तर से यह बहुत तेज होना चाहिए। –

+0

इसमें 99% मामले शामिल हैं। 1% वे पथ हैं जिनमें 2% एफ को परिवर्तित करने का इरादा नहीं है बल्कि पथ स्ट्रिंग का वास्तविक भाग है। – Tyblitz

+0

@ टिब्लिट्ज 2% एफ को 2% 25F तक एन्कोड किया जाएगा यदि यह पथ स्ट्रिंग का हिस्सा था। – Phil

2

यह आपकी समस्या का समाधान करना चाहिए।

str_replace("%2F","/",urlencode('/this/is/my/file right here.jpg')); 
2
$array = explode('/', '/this/is/my/file right here.jpg'); 
foreach ($array as &$value) { 
     $value = urlencode($value); 
} 
print implode('/', $array);