php自动跳转传值乱码

来源:百度知道 编辑:UC知道 时间:2024/07/05 08:26:56
//接值
$zzwm = $_POST['zzwm'];
//自动跳转
Header("Location: hello.php?zzwm=$zzwm");

hello页面是
$zzwm = $_GET['zzwm'];

但是问题来了··如果我传的是单数的汉字的话在hello页面接到的就是乱码
如果用双数个汉字的话接到的就是正常我写的汉字··但是不管单数个汉字还是双数个 地址栏里始终都是乱码 这个不重要·关键就是为什么单数个汉字接到的就是乱码呢··我用的都是UTF-8··都是乱码的话我都能忍了··

请高手解答·分有的事·····
我的是在页1有个Form表单··实现查询功能·里面有2个字段·输入字段1跳到页2·输入字段2跳到页3·所以我的这个Form表单向当页提交·判断是输入了哪个字段之后(两个都输入按字段1跳)在实行自动跳转+传值·下个页面接受值 进行查询·显示· 就这个逻辑·如果我在Form表单里填写的汉字字数是奇数的话 到下个页面就是乱码 如果表单里填的汉字字数是偶数的话 到下个页面就能正常使用· 但地址栏不管传多少字都是乱码··郁闷·我的自动跳转用的是 Header("Location: hello.php?zzwm=$zzwm");

路径不能直接传递汉字

传递汉字前先转换:

$zzwm = htmlentities(urldecode($_POST['zzwm']));

受到汉字信息,把信息编码

$zzwm = urlencode($_GET['zzwm']);

你也可以用js处理跳转

试一下这样吧

是你的设计就有问题

首先说为什么传递参数中不能有中文
因为你做的程序可能会在任何服务器上运行,有些服务器可能是没有中文支持,也没有UTF-8支持,你的程序会根本无法运行。
就如同网址不能用中文一样。你只能把首页命名为index.php而不能命名为“首页.php”一个道理

其次说一下如何解决
据我判断,你的hello.php是为了告诉用户一些信息,比如发布成功,添加失败等。你需要提炼出所有的中问提示,放在一个公共数组中,例如:
$messages = array(
'sendok' => '发布成功',
'addok' => '添加成功‘,
)

这样,你传递参数只需要传递sendok,然后在显示的时候显示$messages[$_GET['zzwm']],就可以了。
这样也有利于你的程序翻译成多国语言,只需要替换你存放$messages的数组的文件即可。

function covertToUTF8($val)
{
if(empty($val) || !function_exists('mb_convert_encoding'))
return false;
if(is_array($val))
{
foreach($val as &$v)
{
$v = covertToUTF8($v);
}
}
else
{