java Web中解决超链接中含有中文的乱码问题 或 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义

标题:java Web中解决超链接中含有中文的乱码问题 或 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义

一、分析

在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义指的就是超链接中含有中文导致的乱码问题

二、解决方案
超链接为get请求,将它转成post请求即可

使用这个js,实现上述功能

 <script>
    function linkClick(linkObject) {
        
    	     var formObject = document.createElement('form');  
    	      document.body.appendChild(formObject);  
    	       formObject.setAttribute('method', 'post');  
    	       var url = linkObject.href;  
    	       var uri = '';  
    	       var i = url.indexOf('?');  
    	               
    	      if(i == -1) {
        
    	        formObject.action = url;  
    	      } else {
        
    	         formObject.action = url.substring(0, i);  
    	      }  
    	               
    	      if( i >= 0 && url.length >= i + 1) {
        
    	         uri = url.substring(i + 1, url.length);  
    	      }  
    	   
          var sa = uri.split('&');  
    	               
    	      for(var i = 0; i < sa.length; i++) {
        
    	        var isa = sa[i].split('=');        
    	        var inputObject = document.createElement('input');  
    	        inputObject.setAttribute('type', 'hidden');  
    	        inputObject.setAttribute('name', isa[0]);  
    	        inputObject.setAttribute('value', isa[1]);  
    	        formObject.appendChild(inputObject);  
    	      }  
    	               
    	      formObject.submit();  
    	              
    	      return false;  
    	 }  
    script>

测试的超链接如下:

<a href='${pageContext.request.contextPath }/TestServlet?name=世界&id=1' onclick="return linkClick(this)">click mea>

完整jsp代码,可直接在服务器上运行的代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>



<html lang="zh-CN">
<head>
    
    <meta charset="utf-8">
    <title>测试乱码,设置属性的乱码2title>
    <script>
    function linkClick(linkObject) {
        
    	     var formObject = document.createElement('form');  
    	      document.body.appendChild(formObject);  
    	       formObject.setAttribute('method', 'post');  
    	       var url = linkObject.href;  
    	       var uri = '';  
    	       var i = url.indexOf('?');  
    	               
    	      if(i == -1) {
        
    	        formObject.action = url;  
    	      } else {
        
    	         formObject.action = url.substring(0, i);  
    	      }  
    	               
    	      if( i >= 0 && url.length >= i + 1) {
        
    	         uri = url.substring(i + 1, url.length);  
    	      }  
    	   
          var sa = uri.split('&');  
    	               
    	      for(var i = 0; i < sa.length; i++) {
        
    	        var isa = sa[i].split('=');        
    	        var inputObject = document.createElement('input');  
    	        inputObject.setAttribute('type', 'hidden');  
    	        inputObject.setAttribute('name', isa[0]);  
    	        inputObject.setAttribute('value', isa[1]);  
    	        formObject.appendChild(inputObject);  
    	      }  
    	               
    	      formObject.submit();  
    	              
    	      return false;  
    	 }  
    script>
head>
<body>		    

<a href='${pageContext.request.contextPath }/TestServlet?name=世界&id=1' onclick="return linkClick(this)">click mea> <br>

   
body>
html>

三、输出分析:
1)输出如下,
当鼠标触碰到click me后,下方会弹出XXX?name=世界&id=1,表示click me是一个超链接,以get方式提交,

java Web中解决超链接中含有中文的乱码问题 或 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义_第1张图片

2)但是当点击click me后,显示的是http://localhost:XXX 后面没有紧跟name=世界,【说明是以post方式提交的】
在这里插入图片描述
3)控制台输出如下:
java Web中解决超链接中含有中文的乱码问题 或 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义_第2张图片

参考链接如下:超链接传递中文出现乱码问题

你可能感兴趣的:(javaWeb)