用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1268|回复: 4
收起左侧

[已解决] 关于uri_to_assoc函数奇怪的问题

[复制链接]
发表于 2015-4-8 09:38:47 | 显示全部楼层 |阅读模式
本帖最后由 codee 于 2015-4-8 10:07 编辑

我做了一个根据属性选择相应商品,使用uri_to_assoc和assoc_to_uri用来获取用户选择的参数和拼接url,但是有些值是带有/的,所以我又想着用urlencode转义,发现/被转义成%2F后,就会出404错误
url:http://localhost/ci/home/category/20/DS-7816HE-E1%2FM
结果:
Not Found
The requested URL /ci/home/category/20/DS-7816HE-E1/M was not found on this server.


发表于 2015-4-8 10:25:26 | 显示全部楼层
本帖最后由 yuzhigang5460 于 2015-4-8 10:26 编辑

浏览器应该不会把: http://localhost/ci/home/category/20/DS-7816HE-E1%2FM 解析成:
http://localhost/ci/home/category/20/DS-7816HE-E1/M
assoc_to_uri 之前把 DS-7816HE-E1/M 用urlencode一下, 不用再次解析了。
 楼主| 发表于 2015-4-8 10:56:37 | 显示全部楼层
yuzhigang5460 发表于 2015-4-8 10:25
浏览器应该不会把: http://localhost/ci/home/category/20/DS-7816HE-E1%2FM 解析成:
http://localhost/c ...

不转义的话,它就会当作两部分来处理,那请问我这个值中带有/的问题该如何解决呢
发表于 2015-4-8 11:28:53 | 显示全部楼层
codee 发表于 2015-4-8 10:56
不转义的话,它就会当作两部分来处理,那请问我这个值中带有/的问题该如何解决呢
...

正常urlencode的话,应该没问题, 可能你的apache的设置需要改一下,如果你用的apache的话:
AllowEncodedSlashes On

这句话:
http://localhost/ci/home/category/20/DS-7816HE-E1%2FM 本身没有错误,是服务器引擎做了一些手脚导致%2F依然被解析成斜杠。

改正后, 调用$array = $this->uri->uri_to_assoc(3);输出应该是 array(20=> 'DS-7816HE-E1%2FM'),
然后urldecode一下,就可以得到你要的数据。

其实这里并不是最佳的实践,遇到这样的问题,最好使用query string:
http://localhost/ci/home/category/?catId=20&catName=DS-7816HE-E1%2FM
在action里使用$catName= $this->input->get('catName')即可。


 楼主| 发表于 2015-4-8 13:24:21 | 显示全部楼层
yuzhigang5460 发表于 2015-4-8 11:28
正常urlencode的话,应该没问题, 可能你的apache的设置需要改一下,如果你用的apache的话:
AllowEncode ...

Thanks,原来是apache的原因导致404,真心感谢

本版积分规则