strtoupper回导致中文乱码么
本帖最后由 molaifeng 于 2013-11-25 09:04:16 编辑
在部署项目时,遇到一个奇怪的问题,页面打开后,php脚本嵌套在html页面里的部分出现乱码,数据库是没问题的。后来定位,发现问题出现在这段代码上(tp框架)。
<br />/**<br /> * 获取和设置语言定义(不区分大小写)<br /> * @param string|array $name 语言变量<br /> * @param string $value 语言值<br /> * @return mixed<br /> */<br />function L($name=null, $value=null) {<br /> static $_lang = array();<br /> // 空参数返回所有定义<br /> if (empty($name))<br /> return $_lang;<br /> // 判断语言获取(或设置)<br /> // 若不存在,直接返回全大写$name<br /> if (is_string($name)) {<br /> echo $name, ' ';<br /> $name = strtoupper($name);echo $name;<br /> if (is_null($value))<br /> return isset($_lang[$name]) ? $_lang[$name] : $name;<br /> $_lang[$name] = $value; // 语言定义<br /> return;<br /> }<br /> // 批量定义<br /> if (is_array($name))<br /> $_lang = array_merge($_lang, array_change_key_case($name, CASE_UPPER));<br /> retur<a>2本文来源gao*daima.com搞@代#码&网6</a><pre>搞gaodaima代码
n;
}
后来,把那个strtoupper该成了mb_strtoupper
<br />$name = mb_strtoupper($name, 'UTF-8');<br />
这个项目部署在其他服务器时没出现这个问题啊,哪位大大解释下,谢谢!!!
分享到:
——解决方案——————–
strtoupper、strtolower 在以前某些 php 版本中曾出现过对中文产生影响的问题
但早已经纠正过了
感觉你对这个函数的使用存在一些问题
离开这个函数原来的语境,这个函数只不过是设置一些键值对
和定义常量相似
比如
L(‘x’, ‘这是个问题’);
echo L(‘X’); // 这是个问题
L(‘x’, ‘这不是个问题’);
echo L(‘X’); //这不是个问题
echo L(‘x’); //这不是个问题
因此,在一般思维中,总是用简单的字符组合去对应复杂的字符组合(这就是缩略词)
这个函数在 TP 中是用于提示信息的多语言转换的,所以也不大可能用中文做键
一旦程序文本中出现中文,那么这个程序文本在执行时就有可能出现乱码问题。所以应避免在程序文本中出现中文
这就是这个函数的精髓所在
搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:strtoupper来导致中文乱码么
转载请注明原文链接:strtoupper来导致中文乱码么
