【发布时间】:2009-12-07 10:07:41
【问题描述】:
我有一个 unicode 网址:\test.php?sText=Московский
我想使用 $_Get 函数来处理 sText 的值。我对 test.php 的代码是:
<?php
$sVar = $_GET['sText'];
echo "Variable = $sVar";
?>
问题是上面的内容是:变量= ??????????
我需要做什么?
【问题讨论】:
我有一个 unicode 网址:\test.php?sText=Московский
我想使用 $_Get 函数来处理 sText 的值。我对 test.php 的代码是:
<?php
$sVar = $_GET['sText'];
echo "Variable = $sVar";
?>
问题是上面的内容是:变量= ??????????
我需要做什么?
【问题讨论】:
这对我来说很好用:
$sVar = $_GET['sText'];
echo urldecode($sVar);
【讨论】:
header('content-type: text/html; charset=utf-8'); 中返回一个 UTF-8 内容类型标头
【讨论】:
感谢所有反馈。
我已经尝试了所有的例子,但我仍然得到问号,即使保存为 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 设置。但是什么?我该如何解决?
【讨论】:
我尝试使用 iconv() 函数来解决您的问题(函数的参数可能会有所不同,具体取决于您的系统配置):
$get = iconv('CP1251', 'UTF-8', $_GET['text']);
echo 'Variable = '.$get; // Variable = Московский
您可以阅读有关iconv functions 的信息。希望对你有用。
【讨论】:
我终于解决了这个问题,谢谢大家的一些好的提示(请参阅本文最后一段以获得快速答案)。
我做错了一些让事情变得困难的事情。
当记录没有写入我的数据库时,我首先注意到我的编码问题,db 和表都设置为 utf-8,所以离开了 php。
为了简单起见,我创建了一个测试 php 页面来演示该问题。当页面从 url 获取 ($_GET) 值时,当我加载测试页面时,我使用 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 变量都得到正确处理。
再次感谢您的帮助。 克雷格
【讨论】: