2011-06-20 11 views
11

मैं आगे में बैकस्लैश के साथ पुराने सिस्टम से JavaScript वैरिएबल आ है स्लैश:जावास्क्रिप्ट का उपयोग कर बैकस्लाश को आगे की स्लैश में कनवर्ट करना ठीक से काम नहीं करता है?

'/46\465531_Thumbnail.jpg'

और मैं इस में तब्दील करने की कोशिश कर रहा हूँ:

'/46/465531_Thumbnail.jpg'

विरासत प्रणाली पर समस्या को ठीक करने का कोई तरीका नहीं है।

javascript:alert("/46\465531_Thumbnail.jpg".replace(/\\/g,"/")); 

प्रतिक्रिया के रूप में मैं:

--------------------------- 
Message from webpage 
--------------------------- 
/46&5531_Thumbnail.jpg 
--------------------------- 
OK 
--------------------------- 

वास्तव में मैं बस के रूप में '/46/465531_Thumbnail.jpg'

क्या गलत है अनुवाद किया जा करना चाहते हैं

यहाँ आदेश मैं IE8 ब्राउज़र पर चल रहा है ?

उत्तर

22

आप अपने स्ट्रिंग निरंतर में बैकस्लैश दोगुना करने की जरूरत है:

alert("/46\\465531_Thumbnail.jpg".replace(/\\/g,"/")); 

अपनी विरासत प्रणाली वास्तव में की तरह एम्बेडेड, अन-उद्धृत (जो है, दोगुनी नहीं) बैकस्लैश के साथ अपने पृष्ठों पर जावास्क्रिप्ट स्ट्रिंग स्थिरांक पैदा कर रही है, तो कि, तो यह टूट गया है और आपको समस्याएं होगी। हालांकि, अगर आप एक्सएमएल या जेएसओएन या जो कुछ भी किसी भी प्रकार के AJAX कॉल के माध्यम से स्ट्रिंग प्राप्त कर रहे हैं, तो आपका कोड ठीक दिखता है।

+0

वास्तव में मैं इसे समझता हूं। समस्या यह है कि मैं स्ट्रिंग में हेरफेर नहीं कर सकता, इसलिए मैं मैन्युअल रूप से एकल बैकस्लैश को संशोधित नहीं कर सकता और डबल बैकस्लैश डाल सकता हूं। मैं यह 'var test = escape ("/ 46 \ 465531_Thumbnail.jpg") करने की कोशिश कर रहा हूं; चेतावनी (teste.replace ("% 26", '/')); ' –

+1

स्ट्रिंग पेज पर इसे कितनी सटीक बनाती है? यदि पृष्ठ पर जावास्क्रिप्ट कोड है जो बैकएंड कोड द्वारा गतिशील रूप से बनाया गया है, और यह * \\ "का उपयोग नहीं कर रहा है, तो आप मूल रूप से डूब गए हैं; जेनरेट कोड बस टूटा हुआ है। आप इसे विश्वसनीय रूप से ठीक करने में सक्षम नहीं होंगे, क्योंकि आप किसी ऐसे व्यक्ति से "अच्छा" चरित्र नहीं बता पाएंगे जो गड़बड़-अप बैकस्लैश का परिणाम है। – Pointy

+1

हां वास्तव में, समाधान बैकएंड कोड को ठीक करना था जो बैकस्लैश को गड़बड़ कर रहा था।केवल जावास्क्रिप्ट का उपयोग करके इसे ठीक करना असंभव है। –

4

यह वास्तव में \46 को चरित्र & के लिए एक भागने-कोड अनुक्रम के रूप में व्याख्या कर रहा है।

alert("/46\\465531_Thumbnail.jpg".replace(/\\/g,"/")); 
      ^^ change \ to \\ 

नमूना:: http://jsfiddle.net/6QWE9/

0

कुछ भी नहीं बदलने के साथ गलत आप कड़ी मेहनत से कोड को स्ट्रिंग जा रहे हैं, तो आप \ से बचने के लिए की जरूरत है। इनपुट गलत है।

javascript:alert("/46\\465531_Thumbnail.jpg".replace(/\\/g,"/")); 
        ^
        \---------------- need to escape this! 
1

प्रतिस्थापन भाग समस्या नहीं है, यह स्ट्रिंग स्वयं है। आपकी स्ट्रिंग:

"/46\465531_Thumbnail.jpg" 

/46\465531 नहीं है। इसके बजाय, बैकस्लैश एक बचने वाले चरित्र के रूप में कार्य कर रहा है। आपको इसे बदलने की जरूरत है:

javascript:alert("/46\\465531_Thumbnail.jpg".replace(/\\/g,"/")); 

यानी बैकस्लैश के साथ बैकस्लैश से बचें।

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