PHP-php 如何对一个url的参数串进行压缩和解压缩
对GET方式表单提交或其他url链接的方式的进行参数传递的时候,如果参数内容很长的话,这个url就会很长。比如:
http://www.domain.com/index.php?$querystring
$querystring = "content=asafafafaasfdaafdasfadsasdfafasdfasasasfdafasdasa";
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
直接用gzcompress来压缩一下吧,用gzuncompress,压缩效率还是挺高的:
$querystring = "content=asafafafaasfdaafdasfadsasdfafasdfasasasfdafasdasajasdlfkjsdklfjasdlkfjjjjjsaldkfjlaskdjfasafafafaasfdaafdasfadsasdfafasdfasasasfdafasdasajasdlfkjsdklfjasdlkfjjjjjsaldkfjlaskdjfasafafafaasfdaafdasfadsasdfafasdfasasasfdafasdasajasdlfkjsdklfjasdlkfjjjjjsaldkfjlaskdjfasafafafaasfdaafdasfadsasdfafasdfasasasfdafasdasajasdlfkjsdklfjasdlkfjjjjjsaldkfjlaskdjfasafafafaasfdaafdasfadsasdfafasdfasasasfdafasdasajasdlfkjsdklfjasdlkfjjjjjsaldkfjlaskdjfasafafafaasfdaafdasfadsasdfafasdfasasasfdafasdasajasdlfkjsdklfjasdlkfjjjjjsaldkfjlaskdjfasafafafaasfdaafdasfadsasdfafasdfasasasfdafasdasajasdlfkjsdklfjasdlkfjjjjjsaldkfjlaskdjfasafafafaasfdaafdasfadsasdfafasdfasasasfdafasdasajasdlfkjsdklfjasdlkfjjjjjsaldkfjlaskdjfasafafafaasfdaafdasfadsasdfafasdfasasasfdafasdasajasdlfkjsdklfjasdlkfjjjjjsaldkfjlaskdjf";
//var_dump(strlen($querystring));//800
var_dump(strlen(gzcompress($querystring,9)));//77
试了一下长度800的字符串,压缩以后只有77
可以使用gzdeflate来压缩,gzinflate()解压。
$str = "content=asafafafaasfdaafdasfadsasdfafasdfasasasfdafasdasa";
$gzdeflate = gzdeflate($str,9);
echo "gzdeflate:".strlen($gzdeflate);
如果参数名和值全部是已知的,那么做一个映射表就可以了。
如果参数的值涉及用户提交的内容,对于过长的内容,最好使用POST,并开启Gzip压缩。
关于URL的长度:
1,普通用户很少通过修改url来实现跳转
2,太短的参数名称就很难理解含义,比如content如果缩短成c,你知道这代表什么意思么?
3,如果说为了便于保存和分享,那么可以考虑short url的处理方式
4,url的长度对性能的影响微乎其微,除非是超长文本,那就是程序设计的问题了
5,如果说刻意追求极短的url,还要进行压缩和解压缩步骤,真的有点画蛇添足了
可以使用URL的短地址压缩技术实现,原理如下:
1.将长网址md5生成32位签名串,分为4段,每段8个字节;
2.对这四段循环处理,取8个字节,将他看成16进制串与0x3fffffff(30位1)与操作,即超过30位的忽略处理;
3.这30位分成6段,每5位的数字作为字母表的索引取得特定字符,依次进行获得6位字符串;
4.总的md5串可以获得4个6位串;取里面的任意一个就可作为这个长url的短url地址;
看看这个资料:参考资料