मैं AJAX के माध्यम से एक PHP स्क्रिप्ट के लिए एक फॉर्म फ़ील्ड की सामग्री पोस्ट कर रहा हूं और जावास्क्रिप्ट का उपयोग escape(field_contents)
पर कर रहा हूं। समस्या यह है कि किसी भी प्लस संकेतों को अलग किया जा रहा है और रिक्त स्थान से प्रतिस्थापित किया जा रहा है। मैं प्लस साइन को सुरक्षित रूप से 'एन्कोड' कैसे कर सकता हूं और उसके बाद PHP पक्ष पर उचित रूप से 'डीकोड' कर सकता हूं?AJAX पोस्ट और प्लस साइन (+) - एन्कोड कैसे करें?
उत्तर
जेएस और PHP में encodeURIComponent() का उपयोग करें, आपको सही मान प्राप्त करना चाहिए।
नोट: यदि आप PHP में $_GET
, $_POST
या $_REQUEST
पहुंचते हैं, तो आप मान जो पहले से ही डीकोड किया गया है पुन: प्राप्त करने कर रहे हैं।
उदाहरण:
अपने जे एस में:
// url encode your string
var string = encodeURIComponent('+'); // "%2B"
// send it to your server
window.location = 'http://example.com/?string='+string; // http://example.com/?string=%2B
अपने सर्वर पर:
echo $_GET['string']; // "+"
ऐसा नहीं है कि यूआरएल इनकोडिंग डेटा होता है केवल कच्चे HTTP अनुरोध है।
एक जीईटी अनुरोध के लिए आप इसे URI. $_SERVER['REQUEST_URI']
या $_SERVER['QUERY_STRING']
से पुनर्प्राप्त कर सकते हैं। एक urlencoded पद के लिए, file_get_contents('php://stdin')
एनबी:
decode()
केवल एक बाइट एन्कोड किए गए वर्ण के लिए काम करता है। यह पूर्ण यूटीएफ -8 रेंज के लिए काम नहीं करेगा।
जैसे:
text = "\u0100"; // Ā
// incorrect
escape(text); // %u0100
// correct
encodeURIComponent(text); // "%C4%80"
नोट: escape('\xc4\x80')
कौन सा बाइट क्रम (\xc4\x80
) कि UTF-8 में एक का प्रतिनिधित्व करता है: "%C4%80"
के बराबर है। तो यदि आप encodeURIComponent() का उपयोग करते हैं तो आपके सर्वर पक्ष को यह पता होना चाहिए कि यह यूटीएफ -8 प्राप्त कर रहा है। अन्यथा PHP एन्कोडिंग को उलझाएगा।
एक फॉलो-अप: जब मैं एन्कोडुरिकोम्पोनेंट (टेक्स्ट) और टेक्स्ट में स्मार्ट कोट (&rsqo;) जैसे वर्ण शामिल होते हैं, तो PHP स्क्रिप्ट को जंक वर्ण दिखाई देते हैं। मुझे लगता है कि यह एक वर्णमाला समस्या है, लेकिन मुझे नहीं पता कि इसे कैसे हल किया जाए। मैं "सामग्री-प्रकार" के साथ AJAX पोस्ट कर रहा हूं: "एप्लिकेशन/एक्स-www-form-urlencoded; charset = UTF-8", और मैं सर्वर पक्ष पर PHP5 का उपयोग कर रहा हूं। – jalperin
आप इन पात्रों को कैसे देख रहे हैं? आपको यह सुनिश्चित करना होगा कि ब्राउजर जानता है कि यह यूटीएफ -8 है। एचटीएमएल में आप '<मेटा http-equiv =" सामग्री-प्रकार "सामग्री =" टेक्स्ट/एचटीएमएल; वर्णसेट = यूटीएफ -8 ">' या 'मेटा वर्णसेट =" यूटीएफ -8 "> 'सेट कर सकते हैं' आप इसे भी सेट कर सकते हैं सामग्री में प्रकार HTTP शीर्षलेख के साथ PHP में।'हेडर (' सामग्री-प्रकार: टेक्स्ट/एचटीएमएल; वर्णसेट = यूटीएफ -8 '); 'पीएस: &rsqo; ब्राउज़र में डीकोड नहीं करता है (एफएफ 3.5)। – bucabay
मैं तुमसे प्यार करता हूँ !!! तुम हमेशा मेरी मदद करो !! :) – Alejandra
जावास्क्रिप्ट में प्रयास करें:
encodeURIComponent()
और PHP में:
urldecode($_POST['field']);
एन्कोडरिकॉम्पोनेंट एन्कोड नहीं किया गया सही जवाब है - लेकिन चूंकि यह यूआरएल एन्कोडेड डेटा उत्पन्न करता है और एचटीएमएल एन्कोडेड डेटा नहीं, html_entity_encode रास्ता बंद है। – Quentin
हेक्साडेसिमल मान आप देख रहे हैं %2B
यह PHP में स्वचालित रूप से मिलता urlencode($stringVal)
के माध्यम से अपने स्ट्रिंग को चलाने के लिए है । और उसके बाद इसे वापस पाने के लिए इसे urldecode($stringVal)
चलाएं।
आप जावास्क्रिप्ट इसे संभाल चाहते हैं, @ bobince की टिप्पणी मैं और अधिक पढ़ने किया था के बाद
का उपयोग
escape(str)
संपादित करें और वह सही है। encodeURIComponent(str)
और decodeURIComponent(str)
का उपयोग करें। एस्केप पात्रों को परिवर्तित नहीं करेगा, केवल उन्हें \
के
* जावास्क्रिप्ट में 'बचें' (या 'unescape') का उपयोग न करें; वे यूआरएल-एन्कोडिंग के समान नहीं हैं और + और किसी भी गैर-ASCII यूनिकोड वर्णों के लिए गलत हो जाएंगे। encodeURIComponent/decodeURIComponent लगभग हमेशा वही है जो आप चाहते हैं। – bobince
यदि आपको PHP में कर्ल करना है, तो आपको PHP से urlencode()
का उपयोग करना चाहिए लेकिन व्यक्तिगत रूप से!
strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+")
आप urlencode(strPOST)
करते हैं, तो आप आप एक और समस्या लाएगा, तो आप एक आइटम 1 और & होगा परिवर्तन% xx मूल्य हो सकता है और एक मूल्य के रूप में हो जाएगा, नीचे यहाँ वापसी देखो!
उदाहरण 1
$strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+") will give Item1=Value1&Item2=%2B
उदाहरण 2
$strPOST = urlencode("Item1=" . $Value1 . "&Item2=+") will give Item1%3DValue1%26Item2%3D%2B
उदाहरण 1 कर्ल
उदाहरण 2 शो में पोस्ट के लिए स्ट्रिंग तैयार करने के लिए है कि रिसेप्टर बराबर नहीं देख सकेंगे अच्छा तरीका है और दोनों मूल्यों को अलग करने के लिए एम्परसैंड!
मेरी समस्या लहजे (á É एन) और धन चिह्न (+) जब मैं mysql के लिए जावास्क्रिप्ट "कोड उदाहरण" को बचाने की कोशिश करने के लिए के साथ था:
मेरी समाधान (नहीं बेहतर तरीका है, लेकिन यह काम करता है):
जावास्क्रिप्ट:
function replaceAll(text, busca, reemplaza){
while (text.toString().indexOf(busca) != -1)
text = text.toString().replace(busca,reemplaza);return text;
}
function cleanCode(cod){
code = replaceAll(cod , "|", "{1}"); // error | palos de explode en java
code = replaceAll(code, "+", "{0}"); // error con los signos mas
return code;
}
समारोह को बचाने के लिए:
function save(pid,code){
code = cleanCode(code); // fix sign + and |
code = escape(code); // fix accents
var url = 'editor.php';
var variables = 'op=save';
var myData = variables +'&code='+ code +'&pid='+ pid +'&newdate=' +(new Date()).getTime();
var result = null;
$.ajax({
datatype : "html",
data: myData,
url: url,
success : function(result) {
alert(result); // result ok
},
});
} // end function
फू php में nction:
<?php
function save($pid,$code){
$code= preg_replace("[\{1\}]","|",$code);
$code= preg_replace("[\{0\}]","+",$code);
mysql_query("update table set code= '" . mysql_real_escape_string($code) . "' where pid='$pid'");
}
?>
इसे और अधिक रोचक बनाने और आशा है कि किसी और के लिए कम बाल खींचने में सक्षम हो। पाइथन का उपयोग करके, किसी डिवाइस के लिए निर्मित शब्दकोश जिसे हम कॉन्फ़िगर करने के लिए कर्ल का उपयोग कर सकते हैं।
समस्या: {"timezone":"+5"} //throws an error " 5"
समाधान: {"timezone":"%2B"+"5"} //Works
तो, संक्षेप में:
var = {"timezone":"%2B"+"5"}
json = JSONEncoder().encode(var)
subprocess.call(["curl",ipaddress,"-XPUT","-d","data="+json])
इस पोस्ट के लिए धन्यवाद!
- 1. प्लस साइन
- 2. पर्ल ऑपरेटर: $ | ++; डॉलर साइन पाइप प्लस प्लस
- 3. प्लस साइन इन क्वेरी स्ट्रिंग
- 4. अनुरोध पैरामीटर खोने प्लस साइन
- 5. AJAX पोस्ट विशेष वर्ण
- 6. बनाम पोस्ट करें AJAX अनुरोध: कब और कैसे उपयोग करें?
- 7. Google+ पर पोस्ट करें (Google प्लस)
- 8. AJAX पोस्ट
- 9. कैसे jQuery ajax पोस्ट
- 10. ग्रहण लॉगकट फ़िल्टर प्लस साइन नहीं दिखता
- 11. Jquery: AJAX पोस्ट और एन्कोडिंग
- 12. AJAX पोस्ट
- 13. jquery AJAX पोस्ट
- 14. jQuery AJAX पोस्ट पीएचपी
- 15. AJAX पोस्ट विधि
- 16. jquery AJAX पोस्ट
- 17. jQuery पोस्ट अनुरोध (नहीं AJAX)
- 18. jQuery ajax स्ट्रिंग पोस्ट
- 19. एस्केपिंग + (प्लस) साइन इन केंडो ग्रिड एएसपी.नेट एमवीसी क्लाइंट टेम्पलेट
- 20. jQuery ajax पोस्ट फ़ाइल क्षेत्र
- 21. stdint.h में यह रहस्यमय मैक्रो प्लस साइन क्या है?
- 22. PHP/अपाचे/AJAX - पोस्ट सीमा?
- 23. पोस्ट AJAX अनुरोध के पैरामीटर एन्कोड करने के लिए encodeURIComponent का उपयोग किया जाना चाहिए?
- 24. django AJAX पोस्ट 403 वर्जित
- 25. गूगल स्प्रेडशीट पर AJAX पोस्ट
- 26. AJAX में बनाम पोस्ट बनाओ?
- 27. AJAX पोस्ट - मैं स्वीकृति-एन्कोडिंग हेडर वैल्यू
- 28. jQuery ajax() बनाम प्राप्त()/पोस्ट()
- 29. JQuery $ .ajax पोस्ट वेब सर्वर
- 30. HTTP प्राप्त करें और पोस्ट करें semantics और सीमाएं
स्पष्टीकरण के लिए, मैं भागने (field_contents) का उपयोग कर रहा था, – jalperin