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 相关文章推荐
使用网络地址转换实现多服务器负载均衡
Oct 09 PHP
PHP字符串 ==比较运算符的副作用
Oct 21 PHP
用Zend Encode编写开发PHP程序
Feb 21 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
Aug 18 PHP
php实现session自定义会话处理器的方法
Jan 27 PHP
PHP中异常处理的一些方法整理
Jul 03 PHP
PHP发送AT指令实例代码
May 26 PHP
php获取服务器操作系统相关信息的方法
Oct 08 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
Aug 28 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
Feb 23 PHP
使用PHP访问RabbitMQ消息队列的方法示例
Jun 06 PHP
laravel框架模型、视图与控制器简单操作示例
Oct 10 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的超级变量$_GET获取HTML表单(Form) 数据
2011/05/07 PHP
php除数取整示例
2014/04/24 PHP
php中mysql连接方式PDO使用详解
2015/02/25 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
PHP的Yii框架中过滤器相关的使用总结
2016/03/29 PHP
基于php伪静态的实现方法解析
2020/07/31 PHP
基于jquery+thickbox仿校内登录注册框
2010/06/07 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
nodejs加密Crypto的实例代码
2016/07/07 NodeJs
详解vuejs几种不同组件(页面)间传值的方式
2017/06/01 Javascript
JS实现移动端整屏滑动的实例代码
2017/11/10 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
Python3中常用的处理时间和实现定时任务的方法的介绍
2015/04/07 Python
Python使用matplotlib的pie函数绘制饼状图功能示例
2018/01/08 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
python使用yield压平嵌套字典的超简单方法
2019/11/02 Python
python 轮询执行某函数的2种方式
2020/05/03 Python
python为什么会环境变量设置不成功
2020/06/23 Python
Python字符串三种格式化输出
2020/09/17 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
Python通过len函数返回对象长度
2020/10/22 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
canvas绘制树形结构可视图形的实现
2020/04/03 HTML / CSS
吨的认识教学反思
2014/04/27 职场文书
人力资源求职信
2014/05/25 职场文书
篮球比赛口号
2014/06/10 职场文书
审计班子对照检查材料
2014/08/27 职场文书
中秋节国旗下演讲稿
2014/09/05 职场文书
2014年小学图书室工作总结
2014/12/09 职场文书
责任书格式
2015/01/29 职场文书
2016年学校安全教育月活动总结
2016/04/06 职场文书
JavaScript 对象创建的3种方法
2021/11/17 Javascript
如何在Python中妥善使用进度条详解
2022/04/05 Python