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 相关文章推荐
分页显示Oracle数据库记录的类之二
Oct 09 PHP
php str_replace的替换漏洞
Mar 15 PHP
谈谈关于php的优点与缺点
Apr 11 PHP
php调用MySQL存储过程的方法集合(推荐)
Jul 03 PHP
php实现用手机关闭计算机(电脑)的方法
Apr 22 PHP
PHP生成器简单实例
May 13 PHP
PHP动态生成指定大小随机图片的方法
Mar 25 PHP
php简单实现短网址(短链)还原的方法(测试可用)
May 09 PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 PHP
PHP与以太坊交互详解
Aug 24 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
Jul 06 PHP
使用composer命令加载vendor中的第三方类库 的方法
Jul 09 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
Cannot modify header information错误解决方法
2008/10/08 PHP
如何让CI框架支持service层
2014/10/29 PHP
php实现获取文章内容第一张图片的方法
2014/11/04 PHP
php启用sphinx全文搜索的实现方法
2014/12/24 PHP
PHP进程同步代码实例
2015/02/12 PHP
JS删除数组元素的函数介绍
2013/03/27 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
究竟什么是Node.js?Node.js有什么好处?
2015/05/29 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
js和jq使用submit方法无法提交表单的快速解决方法
2016/05/17 Javascript
EasyUI Pagination 分页的两种做法小结
2016/07/09 Javascript
javascript的函数劫持浅析
2016/09/26 Javascript
javascript动画之磁性吸附效果篇
2016/12/09 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
解决Vue页面固定滚动位置的处理办法
2017/07/13 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
2018/09/27 Javascript
Bootstrap的aria-label和aria-labelledby属性实例详解
2018/11/02 Javascript
微信小程序工具函数封装
2019/10/28 Javascript
详解javascript中var与ES6规范中let、const区别与用法
2020/01/11 Javascript
Python利用多进程将大量数据放入有限内存的教程
2015/04/01 Python
用Python写一个无界面的2048小游戏
2016/05/24 Python
基于python3 类的属性、方法、封装、继承实例讲解
2017/09/19 Python
python PIL/cv2/base64相互转换实例
2020/01/09 Python
eBay加拿大站:eBay.ca
2019/06/20 全球购物
构造器Constructor是否可被override?
2013/08/06 面试题
新闻学专业应届生求职信
2013/11/08 职场文书
违反学校规定检讨书
2014/01/18 职场文书
农民工创业典型事迹
2014/01/25 职场文书
高中教师评语大全
2014/04/25 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
赢在中国观后感
2015/06/02 职场文书
青涩记忆观后感
2015/06/18 职场文书
Js类的构建与继承案例详解
2021/09/15 Javascript
Python中第三方库Faker的使用详解
2022/04/02 Python
nginx 配置指令之location使用详解
2022/05/25 Servers