strtoupper回导致中文乱码么

molaifeng
博客专家认证
2013-11-25 09:03:22
在部署项目时,遇到一个奇怪的问题,页面打开后,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');

这个项目部署在其他服务器时没出现这个问题啊,哪位大大解释下,谢谢!!!
...全文
211 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
molaifeng 2013-11-25
  • 打赏
  • 举报
回复
谢谢大大的回答!!!
xuzuning 2013-11-25
  • 打赏
  • 举报
回复
strtoupper、strtolower 在以前某些 php 版本中曾出现过对中文产生影响的问题 但早已经纠正过了 感觉你对这个函数的使用存在一些问题 离开这个函数原来的语境,这个函数只不过是设置一些键值对 和定义常量相似 比如 L('x', '这是个问题'); echo L('X'); // 这是个问题 L('x', '这不是个问题'); echo L('X'); //这不是个问题 echo L('x'); //这不是个问题 因此,在一般思维中,总是用简单的字符组合去对应复杂的字符组合(这就是缩略词) 这个函数在 TP 中是用于提示信息的多语言转换的,所以也不大可能用中文做键 一旦程序文本中出现中文,那么这个程序文本在执行时就有可能出现乱码问题。所以应避免在程序文本中出现中文 这就是这个函数的精髓所在
molaifeng 2013-11-25
  • 打赏
  • 举报
回复
不是,问题已经定位了,就是上面的那个代码
码无边 2013-11-25
  • 打赏
  • 举报
回复
是否是浏览器编码问题造成,检查下文件编码。
molaifeng 2013-11-25
  • 打赏
  • 举报
回复
图没发全

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧