马富天PHP博客

PHP实现中文 字母字符串翻转函数无乱码

学习笔记 马富天 2016-06-01 15:02:43 243 0

【摘要】通常情况下,我们看到字符串翻转第一个想到的函数就是strrev(),最近看到一个PHP面试题,问如何实现字符串翻转?想必大伙都跟我一样,填写strrev(),可是我们都错了,这并不是出题者想要的答案。

首先看看,使用strrev()进行字符串翻转

  1. $str = 'abc,def.';	//	时刻记住推荐使用单引号'',效率高
  2. $newstr = strrev($str);
  3. echo '原字符串是:'.$str;	//	'abc,def.'
  4. echo ' 翻转后的字符串是:'.$newstr;	//	'.fed,cba'
  5. echo '<br />';
  6. //	但是当有中文存在的时候,则出现了乱码
  7. $str = 'a这b是c子,符d串ef.';
  8. $newstr = strrev($str);
  9. echo '原字符串是:'.$str;	//	'a这b是c子,符d串ef.'
  10. echo ' 翻转后的字符串是:'.$newstr;	//	输出一串乱码
  11. echo '<br />';

输出结果如图:

请输入图片名称

解决方法,使用mb_strlen()和mb_substr(),加上字符编码

  1. //	mb_strlen($str,'utf-8');具有字符编码的mb_strlen()多字节字符都被计算为1
  2. $str = 'a好的';
  3. $str_count = mb_strlen($str,'utf-8');
  4. echo $str_count;	//	输出3
  5. echo '<br />';
  6. $sub_str = mb_substr($str,2,1,'utf-8');	//	从第二个字符开始截取$str,截取长度为1,即输出'的'
  7. echo $sub_str;
  8. echo '<br />';

结果如图所示:

请输入图片名称

根据这一性质,我们可以实现中英文混合字符串翻转

  1. echo "<meta charset = 'utf-8'>";
  2. function myStrrev($str,$encoding='utf-8'){
  3.     $newstr = '';
  4.     $len = mb_strlen($str);
  5.     for($i=$len-1; $i>=0; $i--){
  6.         $newstr .= mb_substr($str,$i,1,$encoding);
  7.     }
  8.     return $newstr;
  9. }
  10. $string = '相信women是正确的。';
  11. echo $string;
  12. echo '<br />';
  13. echo myStrrev($string);	//	'的。的确正是nemow信相'

运行结果如图所示:

请输入图片名称

版权归 马富天PHP博客 所有

本文标题:《PHP实现中文 字母字符串翻转函数无乱码》

本文链接地址:http://www.mafutian.net/138.html

转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^

0

0

上一篇《 一个实打实的提高网站加载速度的方法 》 下一篇《 Ajax跨域请求PHP数据解决办法 》
分享到:

暂无评论

评论审核未开启
表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情
验证码