我如何阅读与PHP的unicode网址?


Answers

感谢所有的反馈。

我已经尝试了所有的例子,但是我仍然回到问号,即使保存为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设置。 但是什么? 我该如何解决这个问题?

Question

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

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

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

echo "Variable = $sVar";
?>

问题是,以上是即将巴赫为:变量= ??????????

我需要做什么?




我终于解决了这个问题,谢谢大家的一些好的提示(见这篇文章的最后一段快速回答)。

我正在做一些错误的事情,让事情变得困难。

我第一次注意到我的编码问题,当记录没有被写入我的数据库时,数据库和表都被设置为UTF-8,所以离开了PHP。

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

我认为,对于我来说,问题是IE如何互操作网址,由于某些原因,它无法解码或识别为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回应了以下内容:

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变量都被正确处理。

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