1. 程式人生 > >Exception之The valid characters are defined in RFC 7230 and RFC 3986

Exception之The valid characters are defined in RFC 7230 and RFC 3986

程式部署到window上可以成功執行,但是部署到linux上報錯。顯示異常如下圖:
這裡寫圖片描述
根據研究,最終得出結果是因為跳轉時的地址有問題。
所以如果遇到此異常,應該先研究即將跳轉的地址是否有問題。

應該是window系統相容這些錯誤,但是linux中對地址要求更為嚴格。
比如我目前遇到此異常的幾種情況及相關解決方式。
1.上傳時使用button和onclick

function upload(){
    var f=document.getElementById("file").value;
    var filepath=document.getElementById("file"
); var last=f.substr(f.length-4); if(last==".xls"){ var form=document.getElementById("form"); form.action="../ser/mastp.jsp?file="+filepath; form.submit(); }else{ alert('上傳檔案格式不正確'); } }

之前錯誤的地方是
form.action=”../ser/mastp.jsp?file=”+f;
傳引數值是上傳檔案的地址,而傳的引數值的正確形式應該是像程式碼段中所示,是file元素
2.地址中傳參帶有中文
地址中傳遞的引數含有中文也遇到了此異常。
將地址中的中文轉碼的方式:
進行url跳轉時可以整體使用encodeURI
例如:Location.href=encodeURI(“

http://cang.baidu.com/do/s?word=百度&ct=21”);
一開始遇到中文引數的時候,使用encodeURI()進行了一遍編碼,傳過去後,發現解碼出現問題,解碼後中文亂碼。通過網上收索得出,在瀏覽器位址列裡,瀏覽器認為%是個轉義字元,瀏覽器會把%與%之間的編碼,兩位兩位取出後進行解碼,然後再傳遞給處理頁面。因此,需要使用兩次encodeURI方法,。
例如encodeURI(encodeURI(“中文”));
第一次是把中文編碼成%XY的格式,
第二次是對%XY中的%進行編碼,%編碼成%25。
整個傳參過程基本應該是:encodeURI(encodeURI(“中文”))編碼後提交,把最後的編碼結果%25XY在傳遞給處理頁面的過程中,瀏覽器先將URL地址後解碼成%XY,然後再把%XY傳遞給處理頁面。
處理頁面使用URLDecoder.decode(request.getParameter(“引數名”),”UTF-8”);完成解碼。
總的來說就是:
1、漢字出現在URL路徑部分的時候不需要編碼解碼;
2、傳遞中文引數需要先使用encodeURI進行2次編碼;
3、處理引數時需要通過解碼才能正確獲取引數;