php中对URL的处理

php对url操作的常用几个函数有

urlencode($str);

urldecode($str);

htmlentities

html_entity_decode

第一个坑 就是加号与空格在URL中的表现

当HTML表单中的数据被提交时,表单的域名与值被编码并通过HTTP的GET或者POST方法甚至更古远的email把请求发送给服务器。这里的编码方法采用了一个非常早期的通用的URI百分号编码方法,并且有很多小的修改如新行规范化以及把空格符的编码"%20"替换为"+" . 按这套方法编码的数据的MIME类型是application/x-www-form-urlencoded, 当前仍用于(虽然非常过时了)HTML与XForms规范中. 此外,CGI规范包括了web服务器如何解码这类数据、利用这类数据的内容。

自行进行测试 GET与POST方法

第二个坑

假如有一个类似这个的url

http://localhost/test/time2.php?redirect=order.test.com?name=lionis&pay=77

在微信及其他地方 设置回调的时候 常常会是这样的地址形式

如果你这样做

var_dump($_GET['redirect']);//output string(26) "order.test.com?name=lionis"
exit;

这个时候 pay=77就已经是参数丢失了

如果这时候 对test.com后面的参数进行urlencode 然后再拼接访问 此时URL变成了

http://localhost/test/time2.php?redirect=order.test.com%3Fname%3Dlionis%26pay%3D77

则能正常解析所有参数


第三个坑

在做一个项目的时候,图片在html解析正常,但是在安卓和ios客户端却是加载不出来,经过检查

在做入库的时候 url地址进行了htmlspecialchars,在库中存储的url的连接符是&在html中网址会自动进行这个url的转换,在IOS和APP上面由于都没有对url进行解码处理,导致不能识别,找到问题就好办了,最后在入库之前进行了这样的一个操作就ok了,然后在库里面的&符号依然是&

htmlspecialchars_decode


GET

  • 如果想在URL中使用+需要对URL进行encodeURL,把+编码成%2B

  • 在服务端渲染页面的时候,对URL需要encodeURL

  • 在客户端发送请求的时候,javascript需要使用正则来进行替换

  • 在服务端接受参数的时候,对关键字使用decodeURL

  • 对于URL中的URL也需要进行encodeURL

POST

  • POSTContent-Type默认是application/x-www-form-urlencoded,顾名思义对URL进行了encodeURL




nickname
content