代码之家  ›  专栏  ›  技术社区  ›  SausageFingers

如何使用PHP读取unicode url?

  •  1
  • SausageFingers  · 技术社区  · 16 年前

    我有一个unicode url:\test.php?sText=МоСкооСкий

    我想使用$\u Get函数来处理sText的值。我的密码是测试.php是:

    <?php
    $sVar = $_GET['sText'];
    
    echo "Variable = $sVar";
    ?>
    

    我需要做什么?

    5 回复  |  直到 16 年前
        1
  •  2
  •   ganji    8 年前

    这对我来说很好:

    $sVar = $_GET['sText'];
    
    echo urldecode($sVar);
    
        2
  •  1
  •   Philippe Gerber    16 年前
    • 您需要返回一个带有测试.php header('content-type: text/html; charset=utf-8');
        3
  •  1
  •   SausageFingers    16 年前

    感谢所有的反馈。

    我已经尝试了所有的例子,但我仍然得到问号,即使保存为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函数的限制吗?


        4
  •  0
  •   Alex    16 年前

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

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

    你可以阅读 iconv functions . 希望对你有用。

        5
  •  0
  •   SausageFingers    16 年前

    我做了一些错事,使事情变得困难。

    我第一次注意到我的编码问题时,记录没有被写入我的数据库,数据库和表都被设置为utf-8,这样就离开了php。

    我继续使用下面的函数在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

    我仍然不知道IE为什么会这样,但它把我推向了编码调用页中的url的方向。我用javascript调用这个页面,所以我尝试了这个函数 encodeURIComponent() . 谢天谢地,这工作,现在我得到了相同的结果,在铬和IE。

    长话短说,如果我用 编码器组件() 为了对调用url进行编码,我确保将目标php页面的内容类型设置为 header('content-type: text/html; charset=utf-8');

    再次感谢你的帮助。