2014-02-18 29 views
0

我有1個問題升級我的服務器後到PHP 5.4PHP 5.4後/獲得阿拉伯語變量是空

在我們的網站,我們使用註冊全局變量,這是從PHP中刪除,5.4

我們解決這個問題問題通過使用此代碼:

foreach ($_REQUEST as $key => $val) { 
    ${$key} = $val; 
} 

其工作正常,如果$ val爲英文,但如果$ val爲阿拉伯語郎這個代碼回報空VAL

我試圖用:urlencode()htmlspecialchars()但沒有解決這個問題。

+0

此代碼正常工作。不需要使用'urlencode/urldecode'或任何東西,如果你只是使用UTF-8 ... ... foreach($ _REQUEST as $ key => $ val){$ {$ key} = $ val; var_dump($ {$ key}); }'=>'test.php?name [] =عالية'請同時閱讀該文章:[UTF-8通過所有方式](http://stackoverflow.com/questions/279170/utf-8-all-通過) – feeela

+3

你也不需要那個循環。 'extract($ _ REQUEST);'做同樣的事情,雖然任何一種方法都會讓人們覆蓋你的全局變量。 – miken32

+0

這是正確的,問題是從頁面charsets ,,當我改變爲utf-8這個問題解決了,非常感謝 – Sky

回答

-1

嘗試添加到您的標題。

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=iso-8859-6"> 
+0

隨機添加編碼頭可能會使事情更差。除此之外:UTF-8是更好的選擇。 – Sven

+0

這是正確的,問題是從頁面charsets ,,當我改變爲utf-8這個問題解決了,非常感謝 – Sky

0

不要隨意調用任何函數。 PHP不檢測任何編碼。每個字符只是一個字節序列,「零」字節沒有特殊含義。所以基本上不應該有你觀察到的失敗的任何理由。

做一些調試。 var_dump($_REQUEST)將是有序的,最好是隻有一個值的簡化測試用例。如果您需要檢測任何不可打印的字節,請使用echo urlencode($value)快速找到十六進制值 - 但這僅用於調試!它不會幫助解決這個問題,即對這個值進行url編碼不會使它再次適用於你的應用程序(這同樣適用於使用htmlspecialchars(),這沒有任何幫助)。

在你的代碼也傾倒$val。如果它真的是空的,那麼urlencode()或htmlspecialchars()不會改變它,錯誤發生在那之前。

你的問題還沒有透露任何更多的信息,所以請不要這些值轉儲 - 如果你不能弄清楚自己,那麼,這些轉儲都可以看到更新的問題。