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开发GUI
Oct 09 PHP
探讨如何在PHP开启gzip页面压缩实例
Jun 09 PHP
PHP的变量类型和作用域详解
Mar 12 PHP
ThinkPHP权限认证Auth实例详解
Jul 22 PHP
一个经典的PHP验证码类分享
Nov 18 PHP
php实现两个数组相加的方法
Feb 17 PHP
php简单计算页面加载时间的方法
Jun 19 PHP
discuz图片顺序混乱解决方案
Jul 29 PHP
详解WordPress中分类函数wp_list_categories的使用
Jan 04 PHP
深入理解PHP中的count函数
May 31 PHP
php 开发中加密的几种方法总结
Mar 22 PHP
php写入mysql中文乱码的实例解决方法
Sep 17 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字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
10条php编程小技巧
2015/07/07 PHP
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
2016/11/09 PHP
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
angularJS提交表单(form)
2015/02/09 Javascript
JavaScript数组去重的3种方法和代码实例
2015/07/01 Javascript
javascript实现全角半角检测的方法
2015/07/23 Javascript
详解AngularJs中$sce与$sceDelegate上下文转义服务
2016/09/21 Javascript
jsp 自动编译机制详细介绍
2016/12/01 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
2017/05/09 Javascript
JS简单实现数组去重的方法分析
2017/10/14 Javascript
React-intl 实现多语言的示例代码
2017/11/03 Javascript
微信小程序实战篇之购物车的实现代码示例
2017/11/30 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
2018/02/08 Python
简单了解python代码优化小技巧
2019/07/08 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
解决python中的幂函数、指数函数问题
2019/11/25 Python
TensorFlow学习之分布式的TensorFlow运行环境
2020/02/05 Python
python实现逻辑回归的示例
2020/10/09 Python
纯css3无js实现的Android Logo(有简单动画)
2013/01/21 HTML / CSS
ECCO俄罗斯官网:北欧丹麦鞋履及皮具品牌
2020/06/26 全球购物
借款担保书范文
2014/05/13 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
入党积极分子对十八届四中全会期盼的思想汇报
2014/10/17 职场文书
清明节网上祭英烈寄语2015
2015/03/04 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
党委工作总结2015
2015/04/27 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis