zoukankan      html  css  js  c++  java
  • url的规范化问题

    今天公司的项目中代码中被同事发现一个bug,是一个url相对路径转换为绝对路径函数里的问题。

    之前直接copy了开源项目crawler里的NormalizeLink()函数,这个函数内部也是利用.net frameword 中的Uri类进行处理的,多了几步判断处理。

    不过当url参数中含有已经经过urlencode处理的字符时,结果就会出现乱码。猜测Uri内部对url 进行了urldecode处理,而urldecode的encoding与之前urlencode的encoding不同,所以导致乱码。在reflector粗略看了下Uri的源码发现实现有点复杂,也就没继续了。

    呵呵,在面对复杂的不规范的web环境下,拿来的东西终究靠不住。

    晚上回来随手搜集下了url规范化相关的资料:

    1,这是rfc3986的Syntax Components段摘取的

    The generic URI syntax consists of a hierarchical sequence of
       components referred to as the scheme, authority, path, query, and
       fragment.
          URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
          hier-part   = "//" authority path-abempty
                      / path-absolute
                      / path-rootless
                      / path-empty
       The scheme and path components are required, though the path may be
       empty (no characters).  When authority is present, the path must
       either be empty or begin with a slash ("/") character.  When
       authority is not present, the path cannot begin with two slash
       characters ("//").  These restrictions result in five different ABNF
       rules for a path (Section 3.3), only one of which will match any
       given URI reference.
    
       The following are two example URIs and their component parts:
    
             foo://example.com:8042/over/there?name=ferret#nose
             \_/   \______________/\_________/ \_________/ \__/
              |           |            |            |        |
           scheme     authority       path        query   fragment
              |   _____________________|__
             / \ /                        \
             urn:example:animal:ferret:nose

      (吐糟一下,添加了引用之后光标就跳不了引用框之后了,在html模式下插入p,才解决,fuck)

    2,这个从一网友blog中摘取的不规范url的例子:

    1,相对路径

    # 同目錄下的 step2.aspx 頁面

    step2.aspx

    # 網站根目錄下的 index.aspx 頁面

    /index.aspx

    # 上層目錄的 sitemap.aspx 頁面

    ../sitemap.aspx

    # 上兩層目錄的 default.htm 頁面

    http://www.cnblogs.com/default.htm

    # 上層目錄下的 images 目錄下的 dot 目錄下的 red.gif 檔案

    ../images/dot/red.gif

      2,忽略 scheme、 authority、path 部分

     # 跳到第 2 頁

    <a href="?pageNo=2">第 2 頁</a>

      3,忽略 scheme、 authority、path 、query部分

    # 在页面内跳转到顶部
    <a href="#top">Top</a>

         4,忽略 scheme 的部分

      <img src="//l.yimg.com/tw.yimg.com/i/tw/hp/spirit/yahoo_logo.gif" />

    考虑自己写url规范函数,今天就到此为止了。

  • 相关阅读:
    dojo grid 组件
    在xpage开发的时候出现xsp is not defined的错误
    关于Xpages中ssjs库相互引用的问题
    Xpages下实现输入智能提示(TypeAhead)功能
    Xpage中对定制控件在设计视图下外观的定制
    xpage中关于dojo版本的配置
    数据库查询优化方案
    查询表结构
    经典SQL语句集锦
    c#导出PDF
  • 原文地址:https://www.cnblogs.com/yczz/p/2364138.html
Copyright © 2011-2022 走看看