1, the form tag plus Accept-charset code, this can automatically encode form data into the specified character set submission, such as in the UTF8 page to submit data to GB2312, the code is accept-charset= "Gb2312″, But accept-charset except IE other browser all support ...
2, at this time can trigger js,document.charset= ' gb2312′ when submitting, use this code to set the current page encoding as GB2312. Here seems to be perfect, but also a problem, is triggered this code, the current page after the refresh will be garbled, this is because you have just changed the current page encoding.
3, how to deal with the refresh after garbled, is to be judged to determine whether the current page encoding and the default encoding is consistent, if inconsistent then refresh, if (Isie &&
The code is as follows |
Copy Code |
document.charset!= "Utf-8″) Location.reload (false) |
4, the introduction of the Internet up to this step, but I found that this has entered a dead loop, because the 2nd step has changed the code, you are in the current page in any case refresh, or change after the code, so be sure to reset this code just line, this is the case.
The code is as follows |
Copy Code |
if (Isie && document.charset!= "Utf-8″") { Document.charset= ' utf-8′; Location.reload (FALSE); |
The code is combined as follows:
Determine if the current page number is UTF8, if not, set the encoding to UTF8 and refresh to avoid garbled.
The code is as follows |
Copy Code |
var isie=!! Window. ActiveXObject; if (Isie && document.charset!= "Utf-8″") { Document.charset= ' utf-8′; Location.reload (FALSE); |
Set the form Accept-charset, so that non-IE browsers directly submit encoded data to other pages
The code is as follows |
Copy Code |
<form accept-charset= "gb2312″> |
Trigger to modify the current page encoding JS when submitting data
The code is as follows |
Copy Code |
Onsubmit= "if (isie) document.charset= ' gb2312′" |
The correct URL encoding in JavaScript
Having looked at the previous example, have you ever wondered why jquery can solve a problem that cannot be solved by escape?
For this question, I'd like to take a look at the instructions on escape in MSDN (screenshot):
MSDN is clear, and I don't need to explain.
However, I think one might ask: do I submit data by post? That's not a URL.
Yes, when the post data, the parameters are not placed in the URL, but the URL encoding is still used.
Post data is also URL-coded because the form can be submitted in get mode, and the data is submitted to the server via a URL.
Therefore, the submitted data must be URL-coded.
Let's take a look at how $.ajax handles the data submission process:
The code is as follows |
Copy Code |
Ajax:function (origsettings) { var s = Jquery.extend (true, {}, jquery.ajaxsettings, origsettings);
// ............... Get rid of some irrelevant code Convert data if not already a string if (s.data && s.processdata && typeof s.data!== "string") { Note that the following call S.data = Jquery.param (S.data, s.traditional); } |
Then look at the Jquery.param implementation process:
code is as follows |
copy code |
//Serialize An array of form elements or a set of //Key/values into a query string param:function (A, Tradit ional) { var s = []; //...... Get rid of some extraneous code //If A array was passed in, assume that it's an array of form Elements. if (Jquery.isarray (a) | | a.jquery) { //Serializ E The form elements Jquery.each (A, function () { & nbsp; Add (this.name, this.value); }); } else { //......... Remove some of the less-focused code } Return the resulting serialization Return S.join ("&"). Replace (R20, "+"); function Add (key, value) { If value is a function, invoke it and return its value Value = jquery.isfunction (value)? Value (): value; s[S.length] = encodeURIComponent (key) + "=" + encodeuricomponent (value); } } |
The core of this code is the implementation of the Add function, which calls the encodeURIComponent () function internally.
We should pay attention to the way jquery handles data: encodeURIComponent (key) + "=" + encodeuricomponent (value);
jquery at the end of the%20 also replaced with the + number.
In the field of web development, I think there should be no doubt about the authority of jquery, right? So I think the jquery approach is definitely right.
As can be seen from the way jquery is implemented: encodeURI () is actually not recommended for encoding URL data.
Speaking of which, I would like to say why the use of encodeURI is not recommended.
encodeURI is used to encode the entire URL string if a parameter value itself contains some special characters.
For example: key = "X?x/x&x", value = "aa=2&bb=3&cc= Chinese character." ", the result of this function will be incorrect.
It is often used to encode URL paths that contain similar Chinese characters, and are not suitable for handling URL parameters.
However, the directory name and filename in the URL path, we can choose English characters, so encodeURI usually have no chance to use.
Ajax garbled can refer to http://www.111cn.net/wy/js-ajax/44383.htm