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 相关文章推荐
抓取并下载CSS中所有图片文件的php代码
Sep 26 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
Apr 09 PHP
解析coreseek for sphinx的使用
Jun 21 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
Jun 29 PHP
简单的php文件上传(实例)
Oct 27 PHP
zf框架的Filter过滤器使用示例
Mar 13 PHP
新浪SAE云平台下使用codeigniter的数据库配置
Jun 12 PHP
PHP设计模式之适配器模式代码实例
May 11 PHP
Django 中 cookie的使用
Aug 17 PHP
PHP实现微信申请退款功能
Oct 01 PHP
YII框架常用技巧总结
Apr 27 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
Jan 26 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基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
用JavaScript编写COM组件的步骤
2009/03/17 Javascript
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
JS控制显示隐藏兼容问题(IE6、IE7、IE8)
2010/04/01 Javascript
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
Javascript中的isNaN函数使用说明
2011/11/10 Javascript
jQuery Ajax请求状态管理器打包
2012/05/03 Javascript
jQuery之排序组件的深入解析
2013/06/19 Javascript
推荐4个原生javascript常用的函数
2015/01/12 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
原生JS实现ajax与ajax的跨域请求实例
2017/12/01 Javascript
Vue精简版风格概述
2018/01/30 Javascript
vue+webpack实现异步组件加载的方法
2018/02/03 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
2019/04/11 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
python3+PyQt5使用数据库表视图
2018/04/24 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
java判断三位数的实例讲解
2019/06/10 Python
大学生的创业计划书就该这么写
2014/01/30 职场文书
2014年幼儿园植树节活动方案
2014/03/02 职场文书
成龙洗发水广告词
2014/03/14 职场文书
环保倡议书100字
2014/05/15 职场文书
森林病虫害防治方案
2014/06/02 职场文书
校庆活动策划方案
2014/06/05 职场文书
2015秋季开学演讲稿范文
2015/07/16 职场文书
JavaScript嵌入百度地图API的最详细方法
2021/04/16 Javascript
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫