strtoupper來導致中文亂碼麼

來源:互聯網
上載者:User
strtoupper回導致中文亂碼麼
本帖最後由 molaifeng 於 2013-11-25 09:04:16 編輯

在部署項目時,遇到一個奇怪的問題,頁面開啟後,php指令碼嵌套在html頁面裡的部分出現亂碼,資料庫是沒問題的。後來定位,發現問題出現在這段代碼上(tp架構)。


/**
* 擷取和設定語言定義(不區分大小寫)
* @param string|array $name 語言變數
* @param string $value 語言值
* @return mixed
*/
function L($name=null, $value=null) {
static $_lang = array();
// 空參數返回所有定義
if (empty($name))
return $_lang;
// 判斷語言擷取(或設定)
// 若不存在,直接返回全大寫$name
if (is_string($name)) {
echo $name, ' ';
$name = strtoupper($name);echo $name;
if (is_null($value))
return isset($_lang[$name]) ? $_lang[$name] : $name;
$_lang[$name] = $value; // 語言定義
return;
}
// 批量定義
if (is_array($name))
$_lang = array_merge($_lang, array_change_key_case($name, CASE_UPPER));
return;
}




後來,把那個strtoupper該成了mb_strtoupper

$name = mb_strtoupper($name, 'UTF-8');

這個項目部署在其他伺服器時沒出現這個問題啊,哪位大大解釋下,謝謝!!!

分享到:


------解決方案--------------------
strtoupper、strtolower 在以前某些 php 版本中曾出現過對中文產生影響的問題
但早已經糾正過了

感覺你對這個函數的使用存在一些問題
離開這個函數原來的語境,這個函數只不過是設定一些索引值對
和定義常量相似
比如
L('x', '這是個問題');
echo L('X'); // 這是個問題
L('x', '這不是個問題');
echo L('X'); //這不是個問題
echo L('x'); //這不是個問題

因此,在一般思維中,總是用簡單的字元組合去對應複雜的字元組合(這就是縮減詞)

這個函數在 TP 中是用於提示資訊的多語言轉換的,所以也不大可能用中文做鍵
一旦程式文本中出現中文,那麼這個程式文本在執行時就有可能出現亂碼問題。所以應避免在程式文本中出現中文
這就是這個函數的精髓所在
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.