我的服务器上有以下测试脚本:
<?php
echo "Test is: " . $_GET['test'];
?>
如果我使用类似example.com/script.php?test=ɿ
的网址(ɿ是多字节字符)来调用它,结果页面如下所示:
测试是:É¿
如果我尝试对$ _GET ['test']中的值做任何事情,比如将它保存为mysql数据库,我也有同样的问题。我需要做什么才能让PHP正确处理这个值?
答案 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)
按照以下步骤操作:
SET NAMES 'utf8'
<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>