【问题标题】:How do I read a unicode url with PHP?如何使用 PHP 读取 unicode url?
【发布时间】:2009-12-07 10:07:41
【问题描述】:

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

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

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

echo "Variable = $sVar";
?>

问题是上面的内容是:变量= ??????????

我需要做什么?

【问题讨论】:

    标签: php unicode get


    【解决方案1】:

    这对我来说很好用:

    $sVar = $_GET['sText'];
    
    echo urldecode($sVar);
    

    【讨论】:

      【解决方案2】:
      • 您需要在 test.php header('content-type: text/html; charset=utf-8'); 中返回一个 UTF-8 内容类型标头
      • 你需要保存你的 test.php UTF-8 编码(不确定这个,但无论如何都不会受伤)

      【讨论】:

      • 谢谢 Philippe,我稍后再试。
      • 他的 GET 请求 编码有问题。第一个提示仅更改 response 编码。第二个提示仅更改 源代码 编码。
      • 你想怎么知道?如果响应编码错误,他无法通过响应来检查请求编码...
      【解决方案3】:

      感谢所有反馈。

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

      【讨论】:

        【解决方案4】:

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

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

        您可以阅读有关iconv functions 的信息。希望对你有用。

        【讨论】:

          【解决方案5】:

          我终于解决了这个问题,谢谢大家的一些好的提示(请参阅本文最后一段以获得快速答案)。

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

          当记录没有写入我的数据库时,我首先注意到我的编码问题,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 回应了以下内容:

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

          但是,Chrome 会回显一个编码的 url:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-09-14
            • 2021-05-05
            • 1970-01-01
            • 1970-01-01
            • 2012-05-22
            • 1970-01-01
            • 2023-03-25
            相关资源
            最近更新 更多