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 数组排序 array_multisort与uasort的区别
Mar 24 PHP
PHP通过正则表达式下载图片到本地的实现代码
Sep 19 PHP
一个严格的PHP Session会话超时时间设置方法
Jun 10 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
Jun 19 PHP
页面利用渐进式JPEG来提升用户体验度
Dec 01 PHP
php操作(删除,提取,增加)zip文件方法详解
Mar 12 PHP
PHP设计模式之简单投诉页面实例
Feb 24 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
May 30 PHP
Yii2.0中的COOKIE和SESSION用法
Aug 12 PHP
超强多功能php绿色集成环境详解
Jan 25 PHP
PDO::errorCode讲解
Jan 28 PHP
laravel开发环境homestead搭建过程详解
Jul 03 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
神族 Protoss 历史背景
2020/03/14 星际争霸
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
设置php页面编码的两种方法示例介绍
2014/03/03 PHP
PHP中4种常用的抓取网络数据方法
2015/06/04 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
PHP7 新增功能
2021/03/09 PHP
记录几个javascript有关的小细节
2007/04/02 Javascript
简单的ajax连接库分享(不用jquery的ajax)
2014/01/19 Javascript
Egret引擎开发指南之发布项目
2014/09/03 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
javascript日期格式化方法小结
2015/12/17 Javascript
详解AngularJS 模态对话框
2016/04/07 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
BootstrapValidator超详细教程(推荐)
2016/12/07 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
2017/06/13 Javascript
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
2017/09/18 NodeJs
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
2017/11/02 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
vue项目中使用bpmn-自定义platter的示例代码
2020/05/11 Javascript
vue iview实现动态新增和删除
2020/06/17 Javascript
Python struct.unpack
2008/09/06 Python
Python递归遍历列表及输出的实现方法
2015/05/19 Python
华为2019校招笔试题之处理字符串(python版)
2019/06/25 Python
Python3变量与基本数据类型用法实例分析
2020/02/14 Python
解决pycharm下pyuic工具使用的问题
2020/04/08 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
2020/05/12 Python
高二美术教学反思
2014/01/14 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
信用社竞聘演讲稿
2014/05/16 职场文书
乡镇三严三实学习心得体会
2014/10/13 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书
CocosCreator如何实现划过的位置显示纹理
2021/04/14 Javascript
浅谈pytorch中stack和cat的及to_tensor的坑
2021/05/20 Python