使用PHP处理GET参数中的unicode值

时间:2010-01-30 13:16:41

标签: php unicode encoding utf-8

我的服务器上有以下测试脚本:

<?php
echo "Test is: " . $_GET['test'];
?>

如果我使用类似example.com/script.php?test=ɿ的网址(ɿ是多字节字符)来调用它,结果页面如下所示:

  

测试是:É¿

如果我尝试对$ _GET ['test']中的值做任何事情,比如将它保存为mysql数据库,我也有同样的问题。我需要做什么才能让PHP正确处理这个值?

3 个答案:

答案 0 :(得分:4)

您是否告诉用户代理您的HTTP响应是UTF-8?

header ('Content-type: text/html; charset=utf-8');

您可能还希望确保HTML标记也声明编码,例如

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

对于您的数据库,您的表和mysql客户端设置是否设置为UTF-8?如果使用mysql命令行客户端检查数据库,您的终端环境是否设置为期望UTF-8?

简而言之,您必须检查每一步:从原始源数据,接触它的代码,保留它的存储系统,以及用于显示和调试它的工具。

答案 1 :(得分:1)

UTF-8 all the way through…


按照以下步骤操作:

    连接到MySQL DB后
  • SET NAMES 'utf8'
  • HTML中的
  • <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

答案 2 :(得分:0)

通过在浏览器中粘贴URL来获取高utf8字符,浏览器会将utf8字符重新编码为符合RFC 3986的多字节序列,并且您不会在php中获得utf8字符。

但是,如果调用你的url的页面是utf8编码的话,php将正确地从url获取并显示utf8字符。

尝试像这样调用你的php进行测试:

<iframe src="example.com/script.php?test=ɿ" height="100" width="100" border="1"></iframe>