PHP 实现字符串翻转(包含中文汉字)的实现代码


Posted in PHP onApril 01, 2017

包含汉字字符串乱码

PHP面试题,题目很短,也很常见,但更容易出错,题目如下

如何实现字符串翻转?

第一反应,当然是strrev函数啦,这么容易的题目还放在面试里考,真不嫌麻烦啊?但是看了网上的答案后,发现自己错了~~~

strrev函数对英文很好用,直接可以实现字符串翻转,但是面对中文呢?肯定都是乱码,对于这样的问题有很多,比如strstr,substr等函数都是这样的。还好PHP提供了mb_类的函数实现不同编码、不同语言之间的相互转换等操作。下面是我写的PHP字符串翻转函数(mb_类的函数需要开启一个mb_string实现)。

解决方案

代码:

<?php
header("content-type:text/html;charset=utf-8");
/**
  strrev() 函数反转字符串。
  语法
  strrev(string)
  参数 描述
  string 必需。规定要反转的字符串。
 */

/**
此函数的作用是反转中文字符串
mb_strlen() 获取字符的长度
mb_substr() 获取字符的单个元素
krsort() 按照键值逆序排序数组,对关联数组按照键名进行降序排序
Array ( [8] => 国 [7] => 中 [6] => h [5] => s [4] => i [3] => l [2] => g [1] => n [0] => E ) English中国->国中hsilgnE
(ksort()对关联数组按照键名进行升序排序)
implode() 将数组拼接为字符串
explode() 使用字符串分隔字符串
 */
function str_rev_gb($str){
  //判断输入的是不是utf8类型的字符,否则退出
  if(!is_string($str)||!mb_check_encoding($str,'UTF-8')){
    exit("输入类型不是UTF8类型的字符串");
  }
  $array=array();
  //将字符串存入数组
  $l=mb_strlen($str,'UTF-8');//在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算
  for($i=0;$i<$l;$i++){
    $array[]=mb_substr($str,$i,1,'UTF-8');
  }
  //反转字符串
  krsort($array);
  //拼接字符串
  $string=implode($array);
  return $string;
}
$str1 = "Englist";
$str2 = "English中国";
$str3 = "Eng中lish国";
$str4 = "中华人民共和国";
echo '直接用PHP自带strrev函数反转:'.'<br />';
echo $str1."->".strrev($str1)."<br>";
echo $str2."->".strrev($str2)."<br>";
echo $str3."->".strrev($str3)."<br>";
echo $str4."->".strrev($str4)."<br>";
echo '<br />';
echo $str1."->".str_rev_gb($str1)."<br>";
echo $str2."->".str_rev_gb($str2)."<br>";
echo $str3."->".str_rev_gb($str3)."<br>";
echo $str4."->".str_rev_gb($str4)."<br>";

运行结果:

直接用PHP自带strrev函数反转:
Englist->tsilgnE
English中国->��?W�hsilgnE
Eng中lish国->���hsil���gnE
中华人民共和国->��?A居?枘?#17293;?W�

Englist->tsilgnE
English中国->国中hsilgnE
Eng中lish国->国hsil中gnE
中华人民共和国->国和共民人华中

需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
一些PHP写的小东西
Dec 06 PHP
PHP加速 eAccelerator配置和使用指南
Jun 05 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
Feb 09 PHP
php float不四舍五入截取浮点型字符串方法总结
Oct 28 PHP
php switch语句多个值匹配同一代码块的实现
Mar 03 PHP
PHP整数取余返回负数的相关解决方法
May 15 PHP
php实现的短网址算法分享
Jun 20 PHP
php判断并删除空目录及空子目录的方法
Feb 11 PHP
实现PHP框架系列文章(6)mysql数据库方法
Mar 04 PHP
thinkPHP中配置的读取与C方法详解
Dec 05 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
php-app开发接口加密详解
Apr 18 PHP
thinkphp自定义权限管理之名称判断方法
Apr 01 #PHP
浅谈ThinkPHP中initialize和construct的区别
Apr 01 #PHP
PHP房贷计算器实例代码,等额本息,等额本金
Apr 01 #PHP
PHP中file_put_contents追加和换行的实现方法
Apr 01 #PHP
centos下file_put_contents()无法写入文件的原因及解决方法
Apr 01 #PHP
php file_get_contents取文件中数组元素的方法
Apr 01 #PHP
PHP中Laravel 关联查询返回错误id的解决方法
Apr 01 #PHP
You might like
解析:使用php mongodb扩展时 需要注意的事项
2013/06/18 PHP
Zend Framework框架路由机制代码分析
2016/03/22 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
PHP attributes()函数讲解
2019/02/03 PHP
javascript入门·图片对象(无刷新变换图片)\滚动图像
2007/10/01 Javascript
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
详解Bootstrap四种图片样式
2016/01/04 Javascript
js捕捉键盘事件和按键键值的方法
2016/10/10 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
js计时事件实现圆形时钟
2020/03/25 Javascript
如何用JS模拟实现数组的map方法
2020/07/30 Javascript
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
[45:16]完美世界DOTA2联赛循环赛 IO vs FTD BO2第二场 11.05
2020/11/06 DOTA
Python中获取网页状态码的两个方法
2014/11/03 Python
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
对python 各种删除文件失败的处理方式分享
2018/04/24 Python
Python socket实现的简单通信功能示例
2018/08/21 Python
python django model联合主键的例子
2019/08/06 Python
pygame实现五子棋游戏
2019/10/29 Python
Python3和pyqt5实现控件数据动态显示方式
2019/12/13 Python
python小白学习包管理器pip安装
2020/06/09 Python
python 对xml解析的示例
2021/02/27 Python
德国电子商城:ComputerUniverse
2017/04/21 全球购物
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
销售高级职员求职信
2013/10/29 职场文书
技校个人求职信范文
2014/01/25 职场文书
公司自我介绍演讲稿
2014/08/21 职场文书
2014年客房服务员工作总结
2014/11/18 职场文书
2014年售票员工作总结
2014/11/19 职场文书
计划生育汇报材料
2014/12/26 职场文书
关于感谢信的范文
2015/01/23 职场文书
三国演义读书笔记
2015/06/25 职场文书
大学升旗仪式主持词
2015/07/04 职场文书
《称赞》教学反思
2016/02/17 职场文书