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读取IMAP邮件
Oct 09 PHP
模板引擎Smarty深入浅出介绍
Dec 06 PHP
php方法调用模式与函数调用模式简例
Sep 20 PHP
php空间不支持socket但支持curl时recaptcha的用法
Nov 07 PHP
php实现文件下载实例分享
Jun 02 PHP
ThinkPHP的L方法使用简介
Jun 18 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
Mar 04 PHP
PHP实现生成唯一会员卡号
Aug 24 PHP
php利用header函数下载各种文件
Aug 24 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 PHP
设定php简写功能的方法
Nov 28 PHP
数据结构之利用PHP实现二分搜索树
Oct 25 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
codeigniter数据库操作函数汇总
2014/06/12 PHP
深入分析PHP引用(&amp;)
2014/09/04 PHP
laravel安装和配置教程
2014/10/29 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
jQuery使用手册之一
2007/03/24 Javascript
基于jquery实现的鼠标拖拽元素复制并写入效果
2011/08/23 Javascript
基于JavaScript 类的使用详解
2013/05/07 Javascript
js读取注册表的键值示例
2013/09/25 Javascript
利用jquery动画特效和css打造的侧边弹出垂直导航
2014/04/04 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
2014/06/23 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
JavaScript中字符串分割函数split用法实例
2015/04/07 Javascript
谈一谈javascript闭包
2016/01/28 Javascript
基于vue的下拉刷新指令和滚动刷新指令
2016/12/23 Javascript
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
[02:04]2014DOTA2国际邀请赛 DK一个时代的落幕
2014/07/21 DOTA
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
django输出html内容的实例
2018/05/27 Python
python定时关机小脚本
2018/06/20 Python
Python通过递归获取目录下指定文件代码实例
2019/11/07 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
马来西亚时装购物网站:ZALORA马来西亚
2017/03/14 全球购物
SOKOLOV官网:俄罗斯珠宝首饰品牌
2021/01/02 全球购物
自荐信结尾
2013/10/27 职场文书
中学生在校期间的自我评价分享
2013/11/13 职场文书
卫校中专生的自我评价
2014/01/15 职场文书
服务标语口号
2014/07/01 职场文书
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
教代会闭幕词
2015/01/28 职场文书
员工工作表现自我评价
2015/03/06 职场文书
资料员岗位职责范本
2015/04/13 职场文书
汽车修理厂管理制度
2015/08/05 职场文书
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS
简述Java中throw-throws异常抛出
2021/08/07 Java/Android
苹果M1芯片安装nginx 并且部署vue项目步骤详解
2021/11/20 Servers
Win11 Dev 预览版25174.1000发布 (附更新修复内容汇总)
2022/08/05 数码科技