🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
URL中易出现的特殊字符及作用 URL无法显示某些特殊符号,就要使用编码。 编码的格式为:一个百分号,后面跟对应字符的ASCII(16进制)码值。如,空格的编码值是”%20“。 <table> <tr> <th width=20%>特殊符合</th> <th>含义</th> <th width=20%>十六进制</th> </tr> <tr> <td>+</td> <td>表示空格(在URL中不能使用空格)</td> <td>%2B </td> </tr> <td>/</td> <td> 分隔目录和子目录 </td> <td>%2F </td> </tr> </tr> <td>? </td> <td>分隔实际的URL和参数</td> <td>%3F </td> </tr> </tr> <td>#</td> <td>表示书签 </td> <td>%23</td> </tr> </tr> <td>&</td> <td>URL中指定的参数间的分隔符</td> <td>%26 </td> </tr> </tr> <td>=</td> <td>URL中指定的参数的值</td> <td>%3D</td> </tr> </tr> </table> ## URL中#号(井号)的作用 ### **1. #在URL中指页面中的一个位置** 该位置的标识符 #作为页面定位符出现在URL中,代表该位置的标识符,如:`http://www.example.com/index.html#print` ,此URL表示在页面index.htm的print位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。 为网页位置指定标识符,有两个方法:使用锚点或使用id属性,`<a name=”print”></a>`或`<div id=”print” ></div>` ### **2. **HTTP请求不包括#**** \#是用来指导浏览器动作的,针对浏览器起作用,对服务器端完全无用 访问`http://www.example.com/index.html#print`,浏览器实际发出的请求只是请求index.html,没有"#print"部分。 ``` GET /index.html HTTP/1.1 Host: www.example.com ``` ### **3. 位于#后面的字符都是位置标识符** 在第一个#后面出现的任何字符,都会被浏览器解读为位置标识符。这意味着,这些字符都不会被发送到服务器端。这些字符都不会被发送到服务器端。 在URL中指定一个颜色值 `http://www.example.com/?color=#fff` 但浏览器实际发出的请求是"#fff"被省略了。只有将#转码为%23,浏览器才会将其作为实义字符处理。`http://example.com/?color=%23fff` ### **4. 改变#后面的参数不会触发页面重载** 仅改变#后面的内容,浏览器只会滚动到相应位置,不会重新加载网页。 >从`http://www.example.com/index.html#location1`到`http://www.example.com/index.html#location2`,浏览器不会重新向服务器请求index.html。,但此操作会在浏览器的历史记录中添加一次记录,可以通过后退按钮回到上次的位置。 对Ajax来说特别的有用,可以通过设置不同井号值,来表示不同的访问状态,并返回不同的内容给用户。(注:在IE6和IE7下井号的改变不会增加历史记录。) ### **5. 改变#后面的参数会改变浏览器的访问历史** 每一次改变#后的部分,都会在浏览器的访问历史中增加一个记录,使用"后退"按钮,就可以回到上一个位置。 这对于ajax应用程序特别有用,可以用不同的#值,表示不同的访问状态,然后向用户给出可以访问某个状态的链接。 注意,IE 6和IE 7不会因为#的改变而增加历史记录。 ### **6、可以通过javascript使用window.location.hash来改变#后面的值** `window.location.hash`这个属性可读可写。读取时,可以用来判断网页状态是否改变;写入时,则会在不重载网页的前提下,创造一条访问历史记录。 ### **7、onhashchange事件** HTML 5新增的onhashchange事件,当#值发生变化时,就会触发这个事件。IE8+、Firefox 3.6+、Chrome 5+、Safari 4.0+支持该事件。 它的使用方法有三种: `window.onhashchange = func;` `<body onhashchange="func();">` `window.addEventListener("hashchange", func, false);` 对于不支持onhashchange的浏览器,可以用`setInterval`监控`location.hash`的变化。 ### **7、Google抓取#的机制** 默认情况下,Google的网络蜘蛛忽视URL的#部分。 但Google规定,如果希望Ajax生成的内容被浏览引擎读取,那么URL中可以使用"`#!`",Google会自动将其后面的内容转成查询字符串`_escaped_fragment_`的值。 `http://www.mary.com/#!/username` 就会自动抓取另一个URL:`http://www.mary.com/?_escaped_fragment_=/username ` 通过这种机制,Google就可以索引动态的Ajax内容。 ## URL中?(问号)的作用 1)连接作用 `http://www.xxx.com/Show.asp?id=77&nameid=2905210001&page=1` 2)清除缓存 ``` http://www.xxxxx.com/index.html http://www.xxxxx.com/index.html?test123123 ``` 两个url打开的页面一样, 有问号(?)说明不调用缓存的内容,认为是一个新地址,重新读取。