php 中 http_build_query 方法带中文参数为什么会出现乱码
今天出现一个搞怪的小问题 在使用 http_build_query 函数时
代码如下 <a href="?q=dd&<?=http_build_query(array('a'=>'色色'))?>">dian</a> 页面渲染时也转码了,但是服务器端后端获取数据时a 这个参数获取的始终是乱码, 必须将代码修改成 <a href="?q=dd&<?=http_build_query(array('a'=>urlencode('色色')))?>">dian</a> 才行
但是这就有1个问题了,我该如何实现一个通用的http_build_query函数来自动将中文参数做转码呢
暴走的马丁
12 years, 8 months ago
Answers
测试代码, php文件的编码为utf-8
<?php
header('Content-type: text/html; charset=utf-8');
isset($_GET['a']) AND print $_GET['a'];
?>
<a href="?q=dd&<?=http_build_query(array('a'=>'色色'))?>">dian</a>
php 5.3.10 测试通过.没有问题.
可以看下你有问题的url是否和下面的一样. utf-8页面的中文参数在urlencode之后会是3个字节,也就是" 色 = %E8%89%B2 " 如果你色字不是三个字节而是两个, 那么说明页面编码不是utf-8而是gbk的编码. 也就可以解释为什么接受的事后乱码了
?q=dd&a=%E8%89%B2%E8%89%B2
ikloop
answered 12 years, 8 months ago