strtoupper php 中文,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 中是用于提示信息的多语言转换的,所以也不大可能用中文做键

一旦程序文本中出现中文,那么这个程序文本在执行时就有可能出现乱码问题。所以应避免在程序文本中出现中文

这就是这个函数的精髓所在

谢谢大大的回答!!!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 答1: 当使用phpstrtoupper函数将中文转换为大写字母时,可能出现乱码的情况。这是因为phpstrtoupper函数只适用于ASCII字符集,对于Unicode字符集的中文字符集,需要使用mb_strtoupper函数来转换。 因此,要解决这个问题,可以使用mb_strtoupper函数来将中文转换为大写字母,如下所示: ``` $str = '你好,world!'; $str = mb_strtoupper($str, 'UTF-8'); echo $str; ``` 这样就可以将中文转换为大写字母,同时避免出现乱码的问题。 ### 答2: 当phpstrtoupper函数在转换中文时出现乱码问题,可以采取以下解决方案: 1. 设置字符编码:首先,确保你的php文件中使用的字符编码与包含中文的字符串的编码一致。可以在php文件的开头添加以下代码,指定编码为UTF-8: ```php header('Content-Type:text/html;charset=utf-8'); ``` 2. 使用mb_strtoupper函数:strtoupper函数只能处理ASCII字符,不能处理多字节字符,因此在处理中文出现乱码。可以使用mb_strtoupper函数代替,该函数可以处理多字节字符。使用方法如下: ```php $chineseStr = "你好"; $upperStr = mb_strtoupper($chineseStr, 'UTF-8'); echo $upperStr; ``` 3. 转换为整体大写:如果只是需要将中文字符串转为大写,可以使用mb_convert_case函数,并设置转换选项为MB_CASE_UPPER: ```php $chineseStr = "你好"; $upperStr = mb_convert_case($chineseStr, MB_CASE_UPPER, 'UTF-8'); echo $upperStr; ``` ### 答3: 在使用phpstrtoupper函数转换中文时,往往出现乱码的现象。这是由于strtoupper函数默认使用ISO-8859-1字符编码,而中文字符无法用该编码进行正确的转换,从而导致乱码的出现。 要解决这个问题,有以下几种方法: 1. 使用mb_strtoupper函数:该函数是mbstring扩展提供的用于处理多字节字符的函数,可以正确处理中文字符的大小写转换,避免乱码问题。只需将原本的strtoupper函数替换为mb_strtoupper函数即可。 例如:$result = mb_strtoupper($str, 'UTF-8'); 2. 扩展strtoupper函数:我们可以自定义一个函数,用于将中文字符转换为大写字母,而不影响其他非中文字符的转换。可以使用正则表达式匹配中文字符,然后将其替换为对应的大写字母。 例如: function myStrtoupper($str) { $pattern = '/([\x{4e00}-\x{9fa5}])/u'; return preg_replace_callback($pattern, function($matches) { return strtoupper($matches[1]); }, $str); } $result = myStrtoupper($str); 3. 重新设置字符编码:如果实际情况允许,我们可以尝试将整个程序的字符编码统一设置为UTF-8或其他能够正确处理中文字符的编码,从而避免乱码问题。 无论采用哪种方法,我们都应该根据实际情况选择最适合的解决方案。如果只需要转换少量中文字符,使用mb_strtoupper函数可能是最简单和方便的;如果需要在多个地方进行中文转换,可以考虑自定义函数或重新设置字符编码来解决乱码问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值