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 获取本机外网/公网IP的代码
May 09 PHP
php array_filter除去数组中的空字符元素
Jun 21 PHP
利用curl抓取远程页面内容的示例代码
Jul 23 PHP
Thinkphp中import的几个用法详细介绍
Jul 02 PHP
PHP实现数组递归转义的方法
Aug 28 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
Sep 27 PHP
php从文件夹随机读取文件的方法
Jun 01 PHP
Zend Framework框架路由机制代码分析
Mar 22 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
Aug 09 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 PHP
Yii2 中实现单点登录的方法
Mar 09 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 05 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 常用类整理
2009/12/23 PHP
浅析PHP中Collection 类的设计
2013/06/21 PHP
PHP将回调函数作用到给定数组单元的方法
2014/08/19 PHP
php反射类ReflectionClass用法分析
2016/05/12 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
用正则获取指定路径文件的名称
2007/02/27 Javascript
非常漂亮的JS代码经典广告
2007/10/21 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
Vue.js 中的 $watch使用方法
2017/05/25 Javascript
NodeJS 实现手机短信验证模块阿里大于功能
2017/06/19 NodeJs
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
Python采用Django开发自己的博客系统
2020/09/29 Python
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
Python实现判断字符串中包含某个字符的判断函数示例
2018/01/08 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
解决Python使用列表副本的问题
2019/12/19 Python
如何给Python代码进行加密
2020/01/10 Python
tensorflow对图像进行拼接的例子
2020/02/05 Python
Python利用命名空间解析XML文档
2020/08/10 Python
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
Notino芬兰:购买香水和化妆品
2019/04/15 全球购物
竞聘书模板
2014/03/31 职场文书
人事主管岗位职责说明书
2014/07/30 职场文书
2015新学期校长寄语(3篇)
2015/03/25 职场文书
民事答辩状范本
2015/05/21 职场文书
北京爱情故事观后感
2015/06/12 职场文书
实习报告怎么写
2019/06/20 职场文书
如何用Laravel包含你自己的帮助函数
2021/05/27 PHP
Tomcat用户管理的优化配置详解
2022/03/31 Servers
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫
Redis主从复制操作和配置详情
2022/09/23 Redis