[英]How do I read a unicode url with PHP?
我有一个Unicode网址:\\ test.php?sText =Московский
我想使用$ _Get函数来处理sText的值。 我拥有的test.php代码是:
<?php
$sVar = $_GET['sText'];
echo "Variable = $sVar";
?>
问题是上面的代码是:变量= ??????????
我需要做什么?
header('content-type: text/html; charset=utf-8');
的UTF-8内容类型标header('content-type: text/html; charset=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设置。 但是呢 我如何解决呢?
这对我来说很好:
$sVar = $_GET['sText'];
echo urldecode($sVar);
我尝试使用iconv()函数解决您的问题(函数的参数可能会有所不同,具体取决于您的系统配置):
$get = iconv('CP1251', 'UTF-8', $_GET['text']);
echo 'Variable = '.$get; // Variable = Московский
您可以阅读有关iconv函数的信息 。 希望对您有用。
我终于解决了这个问题,谢谢大家的一些有益提示(有关快速答案,请参见本文的最后一段)。
我做错了一些事情,这使事情变得困难。
当记录未写入我的数据库时,我首先注意到我的编码问题,数据库和表都设置为utf-8,从而离开了php。
为简单起见,我创建了一个测试php页面来演示该问题。 当页面从url获取($ _GET)值时,加载测试页面时,我在url test.php?sText =Московский中使用了unicode参数
我认为,对我来说,问题是IE如何互操作url,出于某种原因,它无法对其进行解码或将其识别为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回应了以下内容:
Chrome却回显了编码的网址:
如您所见,chrome正在自动编码url,PHP正在自动正确读取和解码url,大概是因为我将内容类型设置为UTF-8(感谢Philippe)。
我仍然不确定为什么IE会这样,但是它使我朝着在调用页面中编码url的方向发展。 我正在用javascript调用页面,所以尝试了函数encodeURIComponent()
。 值得庆幸的是,此方法有效,现在我在CHROME和IE中获得了相同的结果。
长话短说,如果我使用encodeURIComponent()
来编码调用URL,那么我确保将目标php页面的内容类型设置为header('content-type: text/html; charset=utf-8');
所有unicode url变量均已正确处理。
再次感谢你的帮助。 克雷格
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.