簡體   English   中英

如何使用PHP閱讀unicode網址?

[英]How do I read a unicode url with PHP?

我有一個Unicode網址:\\ test.php?sText =Московский

我想使用$ _Get函數來處理sText的值。 我擁有的test.php代碼是:

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

echo "Variable = $sVar";
?>

問題是上面的代碼是:變量= ??????????

我需要做什么?

  • 您需要返回一個帶有test.php header('content-type: text/html; charset=utf-8');的UTF-8內容類型標header('content-type: text/html; charset=utf-8');
  • 您需要保存對test.php 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回應了以下內容:

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正在自動正確讀取和解碼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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM