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中的加密功能
Oct 09 PHP
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
Mar 06 PHP
PHP 危险函数解释 分析
Apr 22 PHP
PHP使用SOAP调用.net的WebService数据
Nov 12 PHP
PHP中的插件机制原理和实例
Jul 08 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
Apr 17 PHP
PHP编程之设置apache虚拟目录
Jul 08 PHP
浅谈PHP中如何实现Hook机制
Nov 14 PHP
PHP hebrev()函数用法讲解
Feb 21 PHP
PHP实现微信小程序用户授权的工具类示例
Mar 05 PHP
PHP Cli 模式设置进程名称的方法
Jun 12 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
Aug 27 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
利用discuz自带通行证整合dedecms的方法以及文件下载
2007/03/06 PHP
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
PHP 图片水印类代码
2012/08/27 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
2015/12/31 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
2018/06/10 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
2018/09/07 PHP
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
jQuery取得iframe中元素的常用方法详解
2016/01/14 Javascript
浅析jQuery Ajax请求参数和返回数据的处理
2016/02/24 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
移动端翻页插件dropload.js(支持Zepto和jQuery)
2016/07/27 Javascript
javascript使用闭包模拟对象的私有属性和方法
2016/10/05 Javascript
JQuery Ajax 异步操作之动态添加节点功能
2017/05/24 jQuery
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
微信小程序实现搜索功能
2020/03/10 Javascript
Vue切换Tab动态渲染组件的操作
2020/09/21 Javascript
[01:45]典藏宝瓶2+祈求者身心——这就是DOTA2TI9总奖金突破3000万美元的秘密
2019/07/21 DOTA
Python制作数据导入导出工具
2015/07/31 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
2017/06/23 Python
使用python验证代理ip是否可用的实现方法
2018/07/25 Python
python实现在多维数组中挑选符合条件的全部元素
2019/11/26 Python
利用pyshp包给shapefile文件添加字段的实例
2019/12/06 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
药品质量检测应届生求职信
2013/11/14 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
玄武湖导游词
2015/02/05 职场文书
工作试用期自我评价
2015/03/10 职场文书
高中英语教学反思范文
2016/03/02 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
MySQL之DML语言
2021/04/05 MySQL
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python