反饋已提交

網絡繁忙

URL傳遞特殊符号

1. 描述

有些符号在 URL 中是不能直接傳遞的,如'+','%','&'等符号,那麽如果要在 URL 中傳遞這些符号要如何實現呢?

2. 解決方案

2.1 在浏覽器中直接輸入

1)解決方案

通過将這些特殊符号轉換成 16 進制。

2)常用特殊符号及其程式碼

  • +:URL 中+号表示空格其程式碼是 %2B

  • 空格:URL 中的空格可以用+号或者程式碼 %20

  • /:分隔目錄和子目錄其程式碼是 %2F

  • ?:分隔實際的 URL 和參數其程式碼是 %3F

  • %:指定特殊字符其程式碼是 %25

  • #:表示書簽其程式碼是 %23

  • &:URL 中的&表示指定的參數間的分隔符其程式碼是 %26

  • =:URL 中的=表示指定參數的值其程式碼是 %3D

注:在 URL 中,“+”的程式碼爲%2B,除了跟“%”的程式碼 %25 拼接到一起的時候能正常顯示外,其他拼接都默認顯示爲空格,要想正常顯示,需将“+”的程式碼改爲 %252B 才可以。

3)示例

如要字符串“this%is#te=st&o k?+/”作爲參數t的值傳遞給 test.cpt,則 URL 爲:test.cpt&t=this%25is%23te%3Dst%26o%20k%3F%2B%2F或者test.cpt&t=this%25is%23te%3Dst%26o+k%3F%2B%2F(空格可以用 %20 或 + 代替)

例如在 test.cpt 某個單元格中填入=$t,分頁預覽,在 URL 後增加上面的 URL,效果如下:

2.2 集成到項目中

1)解決方案

您可以通過 JavaScript 中自帶的 encodeURIComponent() 方法對參數值進行程式碼轉換。

2)示例

同樣實現的是字符串“this%is#te=st&o k?+/”作爲參數t的值傳遞給 test.cpt,則對應的代碼如下:

注:用戶若想查看完整代碼,可複制代碼到本地查看。

window.location="http://localhost:8075/webroot/decision/view/report?viewlet=test.cpt&t="+encodeURIComponent(encodeURIComponent("this%is#te=st&o k?+/"));

3)兩次解碼的解釋

第一次 encode 是去掉特殊字符, 變成 ASCII 字符串(STR_ENC1), 第二次 encode 是因爲 Web 容器得到後會去自動解一次,
容器 req.getParameter 自動解的這一次,不管是按 GBK 還是 UTF-8 還是 ISO-8859-1 都好,都能夠正确的得到[STR_ENC1], 
如果 JS 只 encode 一次, 那麽容器那邊只能按照 UTF-8 解(客戶的 Tomcat 可能有多種程式碼方式), 否則亂碼, 最後 Java 端再去 URLDecoder.decode

注:GET 的方式, 容器 req.getParameter 的時候會自動解碼一次, 然後報表再解碼一次. 而 POST 的方式, 容器不會自動解碼的, 意味着傳的時候, 只需要 encode 一次即可. 


附件列表


主題: 報表專題
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙