zoukankan      html  css  js  c++  java
  • url中的空格

    url中的空格

    一、总结

    一句话总结:

    url中不能有空格,直接把空格换成%20即可

    $url=url('/do_question'.'/'.$exam_type.'/1'.'/'.$begin_day.'%20-%20'.$end_day.'/review_exam');

    二、关于URL中带空格的问题

    转自或参考:关于URL中带空格的问题
    https://blog.csdn.net/dyyshb/article/details/82346699

     

    URL中的空格有时候被编码成%20,有时候被编码成加号+。

    一个URL的基本组成部分包括协议(scheme)、 域名、端口号、路径和查询字符串(路径参数和锚点标记就暂不考虑了)。路径和查询字符串之间用问号?分离。例如http://www.example.com/index?param=1,路径为index,查询字符串(Query String)为param=1。URL中关于空格的编码正是与空格所在位置相关:空格被编码成加号+的情况只会查询字符串部分出现,而被编码成%20则可以出现在路径和查询字符串中。

    造成这种混乱局面的原因在于:W3C标准规定,当Content-Type为application/x-www-form-urlencoded时,URL中查询参数名和参数值中空格要用加号+替代,所以几乎所有使用该规范的浏览器在表单提交后,URL查询参数中空格都会被编成加号+。而在另一份规范RFC2396,定义URI)里, URI里的保留字符都需转义成%HH格式(Section 3.4 Query Component),因此空格会被编码成%20,加号+本身也作为保留字而被编成%2B,对于某些遵循RFC 2396标准的应用来说,它可能不接受查询字符串中出现加号+,认为它是非法字符。所以一个安全的举措是URL中统一使用%20来编码空格字符。

    Java中的URLEncoder本意是用来把字符串编码成application/x-www-form-urlencoded MIME格式字符串,也就是说仅仅适用于URL中的查询字符串部分,但是URLEncoder经常被用来对URL的其他部分编码,它的encode方法会把空格编成加号+,与之对应的是,URLDecoder的decode方法会把加号+和%20都解码为空格,这种违反直觉的做法造成了当初我对空格URL编码问题的困扰。因此后来我的做法都是,在调用URLEncoder.encode对URL进行编码后(所有加号+已被编码成%2B),再调用replaceAll(“\+”, “%20″),将所有加号+替换为%20。

    例如:对空格的处理方式

    1、先把空格:换成%20,再用encodeURI加密

    2、获取参数,再用decodeURI解密

     
  • 相关阅读:
    单元测试之道读书笔记(七)
    单元测试之道读书笔记(六)
    单元测试之道读书笔记(五)
    单元测试之道读书笔记(三)
    技术网站推荐
    CentOS7部署Haproxy 1.7.2
    Centos7.0配置MySQL主从服务器
    Centos7.0安装mysql5.6
    centos7配置Java环境
    Centos6.5 DNS配置
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/11823937.html
Copyright © 2011-2022 走看看