कैसे मैं URl Node.js में कुछ सांकेतिक शब्दों में बदलना है?


314

मैं चाहता हूं कि URL इसे एनकोड करें:

SELECT name FROM user WHERE uid = me() 

क्या मुझे इसके लिए एक मॉड्यूल डाउनलोड करना होगा? मेरे पास पहले से ही अनुरोध मॉड्यूल है।


8
वास्तव में, यह एक फिसलन भरी सड़क है और हर कीमत पर इससे बचना चाहिए।
अल्फ्रेड

19
क्या आप अपने url में SQL स्टेटमेंट डालने की कोशिश कर रहे हैं ??? SQL इंजेक्शन हमले से सावधान रहें ! यह आमतौर पर उपयोगकर्ताओं के लिए एसक्यूएल को उजागर करने के लिए एक बुरा विचार है, यह वास्तव में खतरनाक है।
लियोनमैक्स

4
@LightnessRacesinOrbit: एक FQL-क्वेरी की तरह दिखता है।
nikc.org

2
@ डेमी: नहीं? वह काम कैसे करेगा। DBMS अनुमतियां पर्याप्त रूप से ठीक नहीं हैं, भले ही हर एक SO उपयोगकर्ता को अपना DB खाता मिला हो। मुझे बताएं कि एसओ पर आप कहाँ देखते हैं कि एसक्यूएल प्रश्न सीधे पास हुए हैं? एक अपवाद डेटा एक्सप्लोरर है, लेकिन यह सब केवल-पढ़ने के लिए विचार है, और यह निश्चित रूप से URL में नहीं डाला गया है।
को ऑर्बिट में

17
लड़का एक SQL सत्यापन उपकरण का निर्माण कर सकता है, इस तरह के उदाहरण में SQL कमांड पास करने में कुछ भी गलत नहीं है। प्रश्न का उत्तर न देने पर बहुत अधिक ध्यान देना न तो अच्छी सलाह देना (सबसे अपवित्र टिप्पणी अच्छी सलाह नहीं देता है, केवल ओपी का मजाक
उड़ाता है

जवाबों:


598

आप जावास्क्रिप्ट का उपयोग कर सकते हैं encodeURIComponent:

encodeURIComponent('select * from table where i()')

31
आगंतुकों को एक खोज को बचाने के लिए, हाँ ... decodeURIComponentआप एन्कोडेड यूआरआई को कैसे डिकोड करते हैं। आपका स्वागत है।
काइलफ़ारिस

125

अंतर्निहित मॉड्यूल querystringवह है जो आप खोज रहे हैं:

var querystring = require("querystring");
var result = querystring.stringify({query: "SELECT name FROM user WHERE uid = me()"});
console.log(result);
#prints 'query=SELECT%20name%20FROM%20user%20WHERE%20uid%20%3D%20me()'

4
इस मामले में हम केवल एक नक्शा पास कर सकते हैं स्ट्रिंग नहीं, इसलिए यदि arg एक स्ट्रिंग है तो आप परिणाम में कुछ भी नहीं देखेंगे। इसलिए यदि आपके पास एन्कोड करने के लिए एन्कोडोडाइकोम्पोनेंट () का उपयोग करना है।
अंकित पटियाल

1
यह JSON ऑब्जेक्ट्स को कूटबद्ध करने और POST-ing के लिए बेहतर है।
एलेक्स डब्ल्यू

यदि स्ट्रिंग में 'या' अक्षर नहीं हैं
Jkarttunen

47

के escapeकार्य का उपयोग करें querystring। यह एक URL सुरक्षित स्ट्रिंग उत्पन्न करता है।

var escaped_str = require('querystring').escape('Photo on 30-11-12 at 8.09 AM #2.jpg');
console.log(escaped_str);
// prints 'Photo%20on%2030-11-12%20at%208.09%20AM%20%232.jpg'

1
यह निश्चित रूप से सही कार्य प्रतीत होता है; querystring.stringify()(निकोलस के उत्तर में) अब एक खाली स्ट्रिंग वापस आ रहा है।
ब्रैंड्सस्क्रिप्ट

4
nodejs.org/api/… का कहना है: " querystring.escape()विधि का उपयोग किया जाता है querystring.stringify()और आमतौर पर सीधे इस्तेमाल होने की उम्मीद नहीं की जाती है।"
साइमन होइकिन

17

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

यदि आप बाद में एक स्ट्रिंग स्ट्रिंग के रूप में स्ट्रिंग का उपयोग करने की योजना बनाते हैं तो यह सही है:

> encodeURIComponent("http://examplé.org/rosé?rosé=rosé")
'http%3A%2F%2Fexampl%C3%A9.org%2Fros%C3%A9%3Fros%C3%A9%3Dros%C3%A9'

यदि आप ASCII वर्ण नहीं चाहते हैं /, :और ?बच जाना चाहते हैं , तो encodeURIइसके बजाय उपयोग करें :

> encodeURI("http://examplé.org/rosé?rosé=rosé")
'http://exampl%C3%A9.org/ros%C3%A9?ros%C3%A9=ros%C3%A9'

हालाँकि, अन्य उपयोग के मामलों के लिए, आपको इसके बजाय uri-js की आवश्यकता हो सकती है :

> var URI = require("uri-js");
undefined
> URI.serialize(URI.parse("http://examplé.org/rosé?rosé=rosé"))
'http://xn--exampl-gva.org/ros%C3%A9?ros%C3%A9=ros%C3%A9'

12

एनकोडरिकम्पोनेंट (स्ट्रिंग) यह करेगी:

encodeURIComponent("Robert'); DROP TABLE Students;--")
//>> "Robert')%3B%20DROP%20TABLE%20Students%3B--"

क्वेरी स्ट्रिंग में एसक्यूएल को पास करना भले ही एक अच्छी योजना न हो, लेकिन

यह देखो

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.