反馈已提交

网络繁忙

URL传递特殊符号

  • 文档创建者:文档助手1
  • 历史版本:17
  • 最近更新:HeroZ 于 2023-02-24
  • 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,效果如下:

    222

    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在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持