2010-01-31 13 views
14

मैं समस्याओं चल रहा है जब जावास्क्रिप्ट कोड के भीतर एक रेल चर का उपयोग करने की कोशिश कर।पलायन उद्धरण?

उदाहरण के लिए, मैं पैरामीटर :complete => "alert('my_var');"

तो my_var = "I'm testing." के साथ एक link_to_remote परिभाषित कर सकता है, तो जावास्क्रिप्ट कोड एकल उद्धरण समय से पहले ही कोड को बंद करने की वजह से टूट जाएगा। अगर मैं escape_javascript(my_var) का उपयोग कर तो यह है कि बोली \' में बदल जाता है की कोशिश है, यह समस्या को ठीक प्रतीत नहीं होता है।

मैंने देखा है कि जब आप alert('I\'m testing'); को आजमाते हैं तो समस्या होती है, लेकिन यदि आप alert('I\\'m testing') करते हैं, तो यह काम करता है। चूंकि escape_javascript केवल \', बजाय \\' में ' बदल जाता है, किसी को यह कैसे संभाल करने के लिए एक सुझाव है?

धन्यवाद! एरिक

उत्तर

28

जब आप alert('I\'m testing'); कोशिश करने में कोई समस्या

बैकस्लैश भी रूबी तार में पलायन है है! स्ट्रिंग शाब्दिक तो:

"alert('I\'m testing');" 

का मतलब स्ट्रिंग:

alert('I'm testing'); 

बैकस्लैश पहले से ही से पहले जावास्क्रिप्ट यह पर एक नज़र हो जाता है चला गया है। आप बच, \\ से बचने के लिए, एक असली \ है कि तब, जावास्क्रिप्ट में, apostrophe बच जाएंगे प्राप्त करने की आवश्यकता आप एक जावास्क्रिप्ट स्ट्रिंग शाब्दिक अंदर एक रूबी स्ट्रिंग शाब्दिक लिख रहे है।

escape_javascript जावास्क्रिप्ट के लिए बैकस्लैश सही ढंग से उत्पन्न करता है, अगर बैकस्लैश अपने इनपुट में शामिल किया गया था। लेकिन फिर, यदि आप एक स्ट्रिंग शाब्दिक लिख रहे हैं, तो आप बैकस्लैश से बचने के लिए कोई वास्तविक बैकस्लैश प्राप्त करने के लिए:

escape_javascript("\b")  -> this is a backspace character! 
escape_javascript("\\b") -> this is backslash-then-letter-b; 
           escaped for JavaScript literal to double-backslash-then-b. 

तो, यह ठीक है:

"'"+escape_javascript(myvar)+"'" 

वैकल्पिक रूप से, आप एक का उपयोग कर सकते JSON एनकोडर आसपास उद्धरण सहित जावास्क्रिप्ट स्ट्रिंग शाब्दिक बनाने के लिए।

+5

इसमें एक साधारण "जे" उपनाम भी है: "'" + j (myvar) + "' – Kodak

+2

हाल के पाठकों के लिए एक नोट: रेल के रूप में 3.2 (और शायद पहले) विधि 'escape_javascript' है और' javascript_escape' –