url示例以下javascript
http://localhost:31956/Login/Auto?Token=e8a67a9f-c062-4964-b703-d79f29c8b64e&ReturnUrl=/mobilesite/GoodsReceipt/JumpSourceIBuild?projectSysNo=19&urlReferer=http://www.baidu.com
html
/Login/Auto接收兩個查詢參數(query string)Token和ReturnUrl, 其中ReturnUrl 的值比較特殊 /mobilesite/GoodsReceipt/JumpSourceIBuild?projectSysNo=19&urlReferer=http://www.baidu.com
,它內部還有查詢參數,其中含有兩個特殊字符(?和&)。若是不進行編碼處理/Login/Auto會認爲本身有三個查詢參數,分別是Token,ReturnUrl和UrlReferer。這顯然不是咱們想要的結果。咱們應該對ReturnUrl進行編碼處理。java
@Test public void testEncode() throws EncoderException, UnsupportedEncodingException { String rawUrl = "http://www.baidu.com?param=~!@#$&*()=:/,;?+'"; String encodeByURLEncoder = URLEncoder.encode(rawUrl, "utf-8"); System.out.println("java.net.URLEncoder encode(UTF-8):"); System.out.println(encodeByURLEncoder); }
<!--apache commons--> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>2.2</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient --> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-math3</artifactId> <version>3.5</version> </dependency>
@Test public void testEncodeReturnUrl() throws EncoderException { String loginUrl = "http://localhost:31956/Login/Auto?Token=%s&ReturnUrl=%s"; String token = "e8a67a9f-c062-4964-b703-d79f29c8b64e"; String returnUrl = "/mobilesite/GoodsReceipt/JumpSourceIBuild?projectSysNo=19&urlReferer=http://www.baidu.com"; URLCodec codec = new URLCodec(); String tokenEncode = codec.encode(token); String returnUrlEncode = codec.encode(returnUrl); String loginUrlEncode = String.format(loginUrl, tokenEncode, returnUrlEncode); System.out.println("編碼結果:"); System.out.println(loginUrlEncode); }
編碼結果http://localhost:31956/Login/Auto?Token=e8a67a9f-c062-4964-b703-d79f29c8b64e&ReturnUrl=%2Fmobilesite%2FGoodsReceipt%2FJumpSourceIBuild%3FprojectSysNo%3D19%26urlReferer%3Dhttp%3A%2F%2Fwww.baidu.com
apache
var loginUrl = "http://localhost:31956/Login/Auto?Token=#{1}#&ReturnUrl=#{2}#"; var token = "e8a67a9f-c062-4964-b703-d79f29c8b64e"; var returnUrl = "/mobilesite/GoodsReceipt/JumpSourceIBuild?projectSysNo=19&urlReferer=http://www.baidu.com"; var tokenEncode = encodeURIComponent(token); var returnUrlEncode = encodeURIComponent(returnUrl); var loginUrlEncode = loginUrl.replace("#{1}#", tokenEncode).replace("#{2}#", returnUrlEncode); console.log("編碼結果:", loginUrlEncode);