建立URL查询字符串-http_build_query()
问题:想要构造一个在查询字符串中包含名/值对的链接
方案: 使用http_build_query()函数
1 | $vars = array( |
在其查询字符串中,空格被编码为”+”,像”#”这样的特殊字符也按十六进制编码为”%23”
虽然http_build_query()通过自动编码的确能够防止变量名或值中的特殊字符破坏url,
但如果变量名是以HTML实体作为开头,那么问题仍然不可避免。
考虑下面这个url片段/stereo.php?speakers=12&cdplayer=5&=10
&
符号的HTML实体是&
,所以浏览器可能会把这段url解析为/stereo.php?speakers=12&cdplayer=52&=10
为了避免嵌入的实体破坏rul,我们有三种选择
第一种,选择不会与实体混淆的变量名,如_amp而不是amp
第二种,在输出url之前把带有HTML实体等价物的字符串转换为相应的实体,使用htmlentities()
1 | $url = 'muppet/select.php?' . htmlentities($query_string); |
第三种,通过arg_separator.input配置指令设置为&来把分隔参数的符号由&改为&
设置改指令后,http_build_query()函数就会用&来组合不同的name=value形式的参数了
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 螃蟹壳!