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时间戳与日期之间转换的实例介绍
Apr 19 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
Jul 18 PHP
PHP里的单例类写法实例
Jun 25 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
Dec 16 PHP
PHP getallheaders无法获取自定义头(headers)的问题
Mar 23 PHP
php判断用户是否关注微信公众号
Jul 22 PHP
yii2实现 &quot;上一篇,下一篇&quot; 功能的代码实例
Feb 04 PHP
PHP输出XML格式数据的方法总结
Feb 08 PHP
详解PHP字符串替换str_replace()函数四种用法
Oct 13 PHP
thinkPHP5实现的查询数据库并返回json数据实例
Oct 23 PHP
详解如何实现Laravel的服务容器的方法示例
Apr 15 PHP
浅谈laravel数据库查询返回的数据形式
Oct 21 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数组
2006/10/09 PHP
PHP的ASP防火墙
2006/10/09 PHP
PHP GD 图像处理组件的常用函数总结
2010/04/28 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
PHP中的正则表达式实例详解
2017/04/25 PHP
php json转换相关知识(小结)
2018/12/21 PHP
javascript+mapbar实现地图定位
2010/04/09 Javascript
JavaScript可否多线程? 深入理解JavaScript定时机制
2012/05/23 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
浅析js封装和作用域
2013/07/09 Javascript
javascript自定义函数参数传递为字符串格式
2014/07/29 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
jQuery插件jRumble实现网页元素抖动
2015/06/05 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
2016/05/25 Javascript
详解vue+vueRouter+webpack的简单实例
2017/06/17 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
微信小程序canvas绘制圆角base64图片的实现
2019/08/18 Javascript
python多线程用法实例详解
2015/01/15 Python
Python的randrange()方法使用教程
2015/05/15 Python
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
python3.7.0的安装步骤
2018/08/27 Python
wxPython多个窗口的基本结构
2019/11/19 Python
tensorflow 重置/清除计算图的实现
2020/01/19 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
python开发前景如何
2020/06/11 Python
python右对齐的实例方法
2020/07/05 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
美国领先的汽车轮胎和轮毂供应商:TireBuyer
2016/07/21 全球购物
英国体育器材进口商店:UK Sport Imports
2017/03/14 全球购物
京东全球售:直邮香港,澳门,台湾,美国,澳大利亚等地区
2017/09/24 全球购物
JOSEPH官网:英国奢侈时尚品牌
2018/01/31 全球购物
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
酒店管理失职检讨书
2014/09/16 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书