如何用PHP读取unicode URL?

时间:2009-12-07 10:07:41

标签: php unicode get

我有一个unicode网址:\ test.php?sText =Московский

我想使用$ _Get函数来处理sText的值。我对test.php的代码是:

<?php
$sVar = $_GET['sText'];

echo "Variable = $sVar";
?>

问题在于以上是bach:变量= ??????????

我需要做什么?

5 个答案:

答案 0 :(得分:1)

  • 您需要使用test.php header('content-type: text/html; charset=utf-8');
  • 返回UTF-8内容类型标头
  • 你需要保存test.php UTF-8编码(不确定这个,但不管怎样都不会受伤)

答案 1 :(得分:1)

感谢所有反馈。

我已经尝试了所有的例子,但即使在保存为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>

产生以下输出:

  

Control =Московский
  变量= ??????????

因此该页面能够使用和显示unicode。这可能是$ _GET函数的限制吗?


修改

我刚尝试在Google Chrome中运行该页面,它运行正常。这让我认为它是一个IE设置。但是什么?我该如何解决它?

答案 2 :(得分:1)

这对我来说很好用:

$sVar = $_GET['sText'];

echo urldecode($sVar);

答案 3 :(得分:0)

我尝试使用iconv()函数来解决您的问题(函数的参数可能会有所不同,具体取决于您的系统配置):

$get = iconv('CP1251', 'UTF-8', $_GET['text']);
echo 'Variable = '.$get; // Variable = Московский

您可以阅读iconv functions。我希望,这对你有用。

答案 4 :(得分:0)

我终于解决了这个问题,谢谢大家提供一些好的建议(请参阅本文最后一段的快速回答)。

我做了一些让事情变得困难的错误。

我首先注意到我的编码问题,当记录没有写入我的数据库时,db和表都被设置为utf-8以便离开php。

为了简单起见,我创建了一个测试php页面来演示问题。当页面从url获取($ _GET)值时,当我加载测试页面时,我在url test.php中使用unicode参数这样做了?sText =Московский

我认为,问题在于IE是如何互操作网址的,因为某些原因它无法解码或将其识别为unicode。当我启动Chrome浏览器失败页面时,这种情况变得很明显,而且效果非常好。

我继续使用以下函数在Chrome和IE中输出完整的网址

<?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回应了以下内容:

  

http://localhost/FirstProject/test.php?sText= ??????????

然而,

Chrome回显了一个已编码的网址:

  

http://localhost/FirstProject/test.php?sText=%D0%9C%D0%BE%D1%81%D0%BA%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D0%B9

你可以看到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变量都被正确处理。 / p>

再次感谢您的帮助。 克雷格