如果我输入密码为Admin$&%^
或Admin$&^%
,那么我的ajax调用有效但如果我输入就像这样
Admin$!%
或Admin$!%^
。 ajax调用抛出异常.....
请帮忙,因为我无法找到此问题的根本原因
INFO: Character decoding failed. Parameter [txt_password] with value [Admin$!%] has been ignored. No
te that the name and value quoted here may be corrupted due to the failed decoding. Use debug level
logging to see the original, non-corrupted values.
java.io.CharConversionException: EOF
at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:80)
at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:46)
at org.apache.tomcat.util.http.Parameters.urlDecode(Parameters.java:410)
at org.apache.tomcat.util.http.Parameters.processParameters(Parameters.java:370)
at org.apache.tomcat.util.http.Parameters.processParameters(Parameters.java:217)
at org.apache.catalina.connector.Request.parseParameters(Request.java:2647)
at org.apache.catalina.connector.Request.getParameter(Request.java:1106)
at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:355)
at javax.servlet.ServletRequestWrapper.getParameter(ServletRequestWrapper.java:158)
在探索时我发现:
Special characters are not allowed inside the query string. They must be replaced by a "%" followed by the ASCII code in Hex. E.g., "~" is replaced by "%7E", "#" by "%23" and so on. Since blank is rather common, it can be replaced by either "%20" or "+" (the "+" character must be replaced by "%2B"). This replacement process is called URL-encoding, and the result is a URL-encoded query string.
这是否意味着我们不能将%用作输入字段中的值?
答案 0 :(得分:1)
您正在尝试对先前步骤中已经过URL解码的字符串进行URL解码。这是你的根本原因。
您的两组经过验证和无效的字符串之间的差异是'&'字符。不确定为什么带有&符号的人验证...可能解析器在到达'%'之前停止,因为'&'被视为分隔符。
答案 1 :(得分:1)
终于得到了解决方案,
在查询字符串中添加参数之前,我使用了javascript的encodeURIComponent函数。 来自W3Schools
The encodeURI() function is used to encode a URI.
This function encodes special characters, except: , / ? : @ & = + $ # (Use encodeURIComponent() to encode these characters).
Tip: Use the decodeURI() function to decode an encoded URI.