2010-05-18 7 views
9

मेरे पास एक पृष्ठ है जो थंबनेल पर आते समय छवि का एक बड़ा संस्करण प्रदर्शित करना है।सीएसएस और JQuery: यूआरएल के छवि नाम ब्रेक कोड के अंदर रिक्त स्थान()

$(document).ready(function(){ 

    $('img').hover(function() { 

    var src = $("#im" + this.id).attr("src"); 
    $('#viewlarge').css('backgroundImage','url(' + src +')'); 
    return false; 
    }); 

}); 

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

मैं एक एक आईडी और JQuery कोड 'div' है निम्नलिखित के रूप में है अलग आईडी हालांकि, कभी-कभी, फ़ोटो अपलोड की जाती हैं जिनमें "रिक्त स्थान" होते हैं। मेरे डेवलपर टूल मुझे बताते हैं कि पृष्ठभूमि-छवि सही ढंग से सेट नहीं है, फिर भी छवि पथ सही है और ब्राउज़र को छवि ढूँढने में समस्या नहीं है।

मेरा सवाल है, क्या मैं किसी भी तरह से url 'src' को sanitize कर सकता हूं, तो रिक्त स्थान कोई समस्या नहीं होगी? मुझे इस सर्वर की ओर से करने के बारे में पता है, फिर भी मैं जानना चाहता हूं कि JQuery/JS के साथ यह कैसे करें।

धन्यवाद!

उत्तर

15

रिक्त स्थान किसी यूआरआई में मान्य नहीं हैं। उन्हें %20 पर एन्कोड किया जाना चाहिए।

आप src.replace(/ /g, '%20'), या अधिक सामान्यतः encodeURI(src) से %-सभी वर्णों को एनकोड करें जो यूआरआई में मान्य नहीं हैं। encodeURIComponent(src) अधिक आम है, लेकिन यह केवल तभी काम करेगा जब src केवल एक ही रिश्तेदार फ़ाइल नाम था; अन्यथा, यह / एन्कोड करेगा और पथ काम कर रहा है।

हालांकि, वास्तविक समस्या कि मूल img src पहले से ही टूटा हुआ है और केवल अपने त्रुटि को सही करने ब्राउज़र fixups करने के लिए धन्यवाद काम कर रहा है। आपको पृष्ठ उत्पन्न करने वाली रूबी स्क्रिप्ट को ठीक करने की आवश्यकता है। पथ में शामिल करने से पहले आपको फ़ाइल नाम को यूआरएल-एन्कोड करना चाहिए; ऐसे कई और पात्र हैं जो आपको केवल अंतरिक्ष की तुलना में समस्याएं पैदा कर सकते हैं।

जैसा कि पेक्का ने कहा था, आपको url(...) मान में यूआरएल के चारों ओर उद्धरणों का भी उपयोग करना चाहिए। जबकि आप उनके बिना कई यूआरएल के लिए दूर हो सकते हैं, कुछ पात्रों को \ से बचाना होगा। डबल-कोट्स का उपयोग करने का मतलब है कि आप इससे बच सकते हैं (कोई यूआरएल में डबल-कोट्स दिखाई नहीं दे सकते हैं)।

+0

+1, मुझे अपने जवाब में 'एन्कोडुरि' और 'एन्कोडुरिकोम्पोनेंट' मिला। –

+0

+1, आपकी स्पष्ट व्याख्या के लिए धन्यवाद! मुझे इसे आजमाना है। – Shyam

+0

क्या आप इसे प्रदर्शित करने के लिए एक सरल जावास्क्रिप्ट उदाहरण लिख सकते हैं? – user3629945

0

जावास्क्रिप्ट का उपयोग encode समारोह एन्कोड करने के लिए अपने 'src'

जैसे , सफेद

$('#viewlarge').css('backgroundImage','url("' + src +'")'); 

तथापि W3C specs के अनुसार,:

$('#viewlarge').css('backgroundImage','url(' + encode(src) +')'); 

मुझे लगता है कि आप भी जावास्क्रिप्ट 'escape' समारोह के रूप में अच्छी तरह से

$('#viewlarge').css('backgroundImage','url(' + escape(src) +')'); 
+0

बहिष्कृत। यूनिकोड समर्थन की कमी के कारण, encodeURIComponent – Quentin

+0

'एन्कोड' का उपयोग बहिष्कृत किया गया है। 'एनकोडुरि 'और' एनकोडुरिकोम्पोनेंट 'की प्रतिस्थापन की सिफारिश की जाती है। –

+0

एन्कोडुरि, मैं इसका उपयोग कैसे कर सकता हूं? एन्कोड() विधि के समान ही? – Shyam

8

यूआरएल के आसपास जोड़ा जा रहा है उद्धरण चिह्नों का उपयोग कर सकते हैं की मदद करनी चाहिए अंतरिक्ष से बच जाना चाहिए, इसलिए यूआरएल एन्कोडिंग समाधान @ एंडी ई के सिर @bobince द्वारा प्रदान किया गया सबसे सुरक्षित है।

+0

इससे केवल तभी मदद मिलेगी जब परिवर्तनीय ब्रैकेट हों। सवाल इंगित करता है कि रिक्त स्थान समस्या है। – Quentin

+0

@ डेविड - यह गलत है, ऑफ़सेट करने के लिए +1। –

+0

+1 - मैं इस सुझाव को [मेरे उत्तर] में जोड़ने जा रहा था (http://stackoverflow.com/questions/2856294/css-and-jquery-spaces-inside-image-name-break-code-of-url/285630 9 # 285630 9) जब तक मैंने देखा कि आप इसे पोस्ट नहीं करेंगे। –

4
  • सबसे पहले, आप ग्राहकों को अपनी छवियों का नाम निर्धारित क्यों कर रहे हैं?
  • दूसरा, आप उन्हें क्यों स्वच्छ नहीं कर रहे हैं?
  • तीसरा, मैं तुम्हें यूआरएल urlencoding नहीं कर रहे हैं संदेह है जब आप उन्हें एचटीएमएल
+0

1. क्योंकि उनके पास फ़ाइलपैथ के साथ एक डरावना डरावना बड़ा डेटाबेस है। आइए इसे माइग्रेशन समस्या दें। 2. मैं, मैं अभी भी प्रतिस्थापन ऐप विकसित कर रहा हूं। 3. मैं एक n00b हूँ, मैं और क्या जोड़ सकता हूं;) – Shyam

+0

शांत, यह कौन सी साइट है? मैं एक विकृत नाम वाली फ़ाइल अपलोड करूंगा और अपने पृष्ठ में जावास्क्रिप्ट इंजेक्ट करूँगा और अपने उपयोगकर्ता लॉग इन चुरा सकता हूं, एक सत्र ले सकता हूं और एक खाता अपहरण कर सकता हूं, कुछ डेटा नष्ट कर सकता हूं और अन्यथा आपके व्यवसाय महाकाव्य दर्द और व्यय का कारण बनता हूं। लुभाने! –

+1

* मैं नहीं चाहता। लेकिन कोई भी कर सकता था! –

0

मैं करने के लिए अपने फ़ाइल नामों में रिक्तियों के साथ छवियों की अनुमति नहीं होगी (जो एक 20% में एक अंतरिक्ष बारी होगी) को लिखने अपलोड किया जाना - मुझे अच्छा अभ्यास प्रतीत नहीं होता है।

+0

मैं अब भी मजबूर कर रहा हूं। – Shyam

0

मुझे पता है कि आपने पहले से ही अपना जवाब चुना है, लेकिन मैं पेक्का के समाधान में सुधार करना चाहता हूं और सबसे व्यवहार्य समाधान प्रदान करना चाहता हूं क्योंकि यह एक और समस्या में भाग गया है जबकि यह ब्रैकेट के साथ फ़ाइल नाम संभालने में है।

$("#viewlarge").css("background",'url(' + "'" + url+ "'" + ')'); 

मुझे आशा है कि यह मदद करता है!

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