我是一位有用的助手,可以为您进行翻译。以下是需要翻译的内容:
我有一个Unicode URL:\test.php?sText=Московский
我想使用$_Get函数来处理sText的值。我现在的test.php代码如下:
<?php
$sVar = $_GET['sText'];
echo "Variable = $sVar";
?>
问题在于上面的内容会返回为:变量 = ?????????? 我需要做什么?
这对我来说很好用:
$sVar = $_GET['sText'];
echo urldecode($sVar);
感谢所有的反馈。
我已经尝试了所有的例子,但是即使保存为utf-8后仍然返回问号。
是否有php.ini设置需要添加/启用以支持Unicode?
目前,对于我来说,以下代码:
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
<body>
<?php
$sVarControl = "Московский";
$sVar = $_GET['sText'];
echo "Control = $sVarControl <br />";
echo "Variable = $sVar <br />";
?>
</body>
</html>
生成以下输出:
控制 = Московский
变量 = ??????????
因此,该页面能够处理和显示Unicode。这可能是$_GET函数的限制吗?
编辑
我刚刚尝试在Google Chrome中运行该页面,它完美地工作了。这让我想到可能是IE的设置问题。但是是什么问题呢?我该如何解决它?
我终于解决了这个问题,感谢大家提供的一些好建议(请参见本帖子最后一段的快速答案)。
我做了一些错误的事情,使事情变得困难。
当记录没有写入我的数据库时,我首先注意到我的编码问题,数据库和表都设置为utf-8,所以只能是php的问题。
为了简化事情,我创建了一个测试php页面来演示问题。由于该页面从url获取($_GET)值,因此当我加载我的测试页面时,我使用了一个unicode参数在url test.php?sText=Московский
对我来说,问题可能是IE如何相互操作url,由于某种原因它无法解码或识别它为unicode。当我在Chrome中启动失败的页面时,它完美地工作了,这一点变得明显。
我继续使用以下函数在Chrome和IE中输出完整的url
<?php
function curPageURL() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}
echo curPageURL();
?>
Internet Explorer 8 显示了以下内容:
然而,Chrome回显了一个编码后的URL:
正如您所看到的,Chrome自动对URL进行编码,而PHP自动正确地读取和解码它,这可能是因为我已将内容类型设置为UTF-8(感谢Philippe)。
我仍然不确定IE为什么会表现出这样的行为,但它让我尝试在调用页面中对URL进行编码。我在JavaScript中调用了该页面,因此我尝试了encodeURIComponent()
函数。幸运的是,这起作用了,现在我在Chrome和IE中得到了相同的结果。
长话短说,如果我使用encodeURIComponent()
来编码调用URL,并确保我将目标PHP页面的内容类型设置为header('content-type: text/html; charset=utf-8');
,则所有Unicode URL变量都将被正确处理。
再次感谢您的帮助。 Craig
header('content-type: text/html; charset=utf-8');
我已经尝试使用iconv()函数来解决您的问题(函数参数可能因系统配置而异):
$get = iconv('CP1251', 'UTF-8', $_GET['text']);
echo 'Variable = '.$get; // Variable = Московский