Solution (ASP. NET), ajaxasp.net

Source: Internet
Author: User
Tags 0xc0

Solution (ASP. NET), ajaxasp.net

Recently, I encountered a small problem in the company's resource and article upload function. It took me a long time.

This function is similar to publishing information using the rich text editor, but submitting data using Ajax. Therefore, the submitted parameter values inevitably contain html tags.

Running the code locally has never been a problem and can always be submitted successfully. However, when the code is deployed online, data cannot be submitted successfully. It has been stuck for a long time and has been found for a long time.

The submission failed because the submitted data contains html tags and cannot be directly requested to my target address.

The solution is as follows:

1. Use Base64 encoding (similar to encryption) of JavaScript to carry the parameter values of html tags on the page.

2. After obtaining data from the target address, use the background Base64 decoding method to decode the obtained data.

The following is the Base64 encoding and decoding method code of my JS:

// The following are 64 basic codes: var base64EncodeChars = "encoding +/"; var base64DecodeChars = new Array (-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 62, -1,-1,-1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,-1,-1,-1, -1,-1,-1,-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,-1,-1,-1,-1,-1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,-1,-1,-1,-1,-1 ); // encoding method function base64encode (str) {var out, I, len; var c1, c2, c3; len = str. length; I = 0; out = ""; while (I <len) {c1 = str. charCodeAt (I ++) & 0xff; if (I = len) {out + = base64EncodeChars. charAt (c1> 2); out + = base64EncodeChars. charAt (c1 & 0x3) <4); out + = "="; break;} c2 = str. charCodeAt (I ++); if (I = len) {out + = base64EncodeChars. charAt (c1> 2); out + = base64EncodeChars. charAt (c1 & 0x3) <4) | (c2 & 0xF0)> 4); out + = base64EncodeChars. charAt (c2 & 0xF) <2); out + = "="; break;} c3 = str. charCodeAt (I ++); out + = base64EncodeChars. charAt (c1> 2); out + = base64EncodeChars. charAt (c1 & 0x3) <4) | (c2 & 0xF0)> 4); out + = base64EncodeChars. charAt (c2 & 0xF) <2) | (c3 & 0xC0)> 6); out + = base64EncodeChars. charAt (c3 & 0x3F);} return out;} // decoded function base64decode (str) {var c1, c2, c3, c4; var I, len, out; len = str. length; I = 0; out = ""; while (I <len) {do {c1 = base64DecodeChars [str. charCodeAt (I ++) & 0xff];} while (I <len & c1 =-1); if (c1 =-1) break; do {c2 = base64DecodeChars [str. charCodeAt (I ++) & 0xff];} while (I <len & c2 =-1); if (c2 =-1) break; out + = String. fromCharCode (c1 <2) | (c2 & 0x30)> 4); do {c3 = str. charCodeAt (I ++) & 0xff; if (c3 = 61) return out; c3 = base64DecodeChars [c3];} while (I <len & c3 =-1); if (c3 =-1) break; out + = String. fromCharCode (c2 & 0XF) <4) | (c3 & 0x3C)> 2); do {c4 = str. charCodeAt (I ++) & 0xff; if (c4 = 61) return out; c4 = base64DecodeChars [c4];} while (I <len & c4 =-1); if (c4 =-1) break; out + = String. fromCharCode (c3 & 0x03) <6) | c4) ;}return out;} function utf16to8 (str) {var out, I, len, c; out = ""; len = str. length; for (I = 0; I <len; I ++) {c = str. charCodeAt (I); if (c> = 0x0001) & (c <= 0x007F) {out + = str. charAt (I);} else if (c> 0x07FF) {out ++ = String. fromCharCode (0xE0 | (c> 12) & 0x0F); out + = String. fromCharCode (0x80 | (c> 6) & 0x3F); out + = String. fromCharCode (0x80 | (c> 0) & 0x3F);} else {out + = String. fromCharCode (0xC0 | (c> 6) & 0x1F); out + = String. fromCharCode (0x80 | (c> 0) & 0x3F) ;}} return out;} function utf8to16 (str) {var out, I, len, c; var char2, char3; out = ""; len = str. length; I = 0; while (I <len) {c = str. charCodeAt (I ++); switch (c> 4) {case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: // 0 xxxxxxx out + = str. charAt (I-1); break; case 12: case 13: // 110x xxxx 10xx xxxx char2 = str. charCodeAt (I ++); out + = String. fromCharCode (c & 0x1F) <6) | (char2 & 0x3F); break; case 14: // 1110 xxxx 10xx xxxx 10xx xxxx char2 = str. charCodeAt (I ++); char3 = str. charCodeAt (I ++); out + = String. fromCharCode (c & 0x0F) <12) | (char2 & 0x3F) <6) | (char3 & 0x3F) <0); break ;}} return out ;}

The code for Base64 encoding by calling the JS method on the page is as follows:

 var articleContent = editor.getContent();   articleContent = base64encode(utf16to8(articleContent));

However, another new problem occurs. After using JavaScript to encode the data in Base64 format, JS replaces the plus sign (+) with a space, the data decoded by my background method is incorrect.

The solution is as follows:

I used the JS method replace () method to replace it first, but there was an error. JS just replaced my first space with the plus sign (+). The final solution is as follows.

In the background (under the target receiving address), replace the space with the plus sign (+ ). The Code is as follows:

String content = Request ["content"]. toString (); if (content. contains ("") {content = content. replace ("", "+");} // byte [] sa = Convert. fromBase64String (content); // Encoding Ansi = Encoding. getEncoding ("GB2312"); // content = Ansi. getString (sa); content = Base64Decrypt (content); // Base64 Decoding

If Base64 encoding and decoding methods in the background do not match, see the following:

/// <Summary> /// Base64 encryption /// </summary> /// <param name = "input"> string to be encrypted </param> /// <returns> </returns> public static string Base64Encrypt (string input) {return Base64Encrypt (input, new UTF8Encoding ());} /// <summary> /// Base64 encryption /// </summary> /// <param name = "input"> string to be encrypted </param> /// <param name = "encode"> character encoding </param> // <returns> </returns> public static string Base64Encrypt (string input, encoding encode) {return Convert. toBase64String (encode. getBytes (input ));} /// <summary> /// Base64 decryption /// </summary> /// <param name = "input"> string to be decrypted </param> /// <returns> </returns> public static string Base64Decrypt (string input) {return Base64Decrypt (input, new UTF8Encoding ());} /// <summary> /// Base64 decryption /// </summary> /// <param name = "input"> string to be decrypted </param> /// <param name = "encode"> character encoding </param> // <returns> </returns> public static string Base64Decrypt (string input, encoding encode) {return encode. getString (Convert. fromBase64String (input ));}

The above is a small Editor to introduce to you the Ajax submit parameter values with html tags cannot be submitted successfully solution (ASP.. Thank you very much for your support for the help House website!

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.