PHP实现ASCII码与字符串相互转换的方法


Posted in PHP onApril 29, 2017

本文实例讲述了PHP实现ASCII码与字符串相互转换的方法。分享给大家供大家参考,具体如下:

<?php
class ascii {
  /**
   * 将ascii码转为字符串
   * @param type $str 要解码的字符串
   * @param type $prefix 前缀,默认:&#
   * @return type
   */
  function decode($str, $prefix="&#") {
    $str = str_replace($prefix, "", $str);
    $a = explode(";", $str);
    foreach ($a as $dec) {
      if ($dec < 128) {
        $utf .= chr($dec);
      } else if ($dec < 2048) {
        $utf .= chr(192 + (($dec - ($dec % 64)) / 64));
        $utf .= chr(128 + ($dec % 64));
      } else {
        $utf .= chr(224 + (($dec - ($dec % 4096)) / 4096));
        $utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64));
        $utf .= chr(128 + ($dec % 64));
      }
    }
    return $utf;
  }
  /**
   * 将字符串转换为ascii码
   * @param type $c 要编码的字符串
   * @param type $prefix 前缀,默认:&#
   * @return string
   */
  function encode($c, $prefix="&#") {
    $len = strlen($c);
    $a = 0;
    while ($a < $len) {
      $ud = 0;
      if (ord($c{$a}) >= 0 && ord($c{$a}) <= 127) {
        $ud = ord($c{$a});
        $a += 1;
      } else if (ord($c{$a}) >= 192 && ord($c{$a}) <= 223) {
        $ud = (ord($c{$a}) - 192) * 64 + (ord($c{$a + 1}) - 128);
        $a += 2;
      } else if (ord($c{$a}) >= 224 && ord($c{$a}) <= 239) {
        $ud = (ord($c{$a}) - 224) * 4096 + (ord($c{$a + 1}) - 128) * 64 + (ord($c{$a + 2}) - 128);
        $a += 3;
      } else if (ord($c{$a}) >= 240 && ord($c{$a}) <= 247) {
        $ud = (ord($c{$a}) - 240) * 262144 + (ord($c{$a + 1}) - 128) * 4096 + (ord($c{$a + 2}) - 128) * 64 + (ord($c{$a + 3}) - 128);
        $a += 4;
      } else if (ord($c{$a}) >= 248 && ord($c{$a}) <= 251) {
        $ud = (ord($c{$a}) - 248) * 16777216 + (ord($c{$a + 1}) - 128) * 262144 + (ord($c{$a + 2}) - 128) * 4096 + (ord($c{$a + 3}) - 128) * 64 + (ord($c{$a + 4}) - 128);
        $a += 5;
      } else if (ord($c{$a}) >= 252 && ord($c{$a}) <= 253) {
        $ud = (ord($c{$a}) - 252) * 1073741824 + (ord($c{$a + 1}) - 128) * 16777216 + (ord($c{$a + 2}) - 128) * 262144 + (ord($c{$a + 3}) - 128) * 4096 + (ord($c{$a + 4}) - 128) * 64 + (ord($c{$a + 5}) - 128);
        $a += 6;
      } else if (ord($c{$a}) >= 254 && ord($c{$a}) <= 255) { //error
        $ud = false;
      }
      $scill .= $prefix.$ud.";";
    }
    return $scill;
  }
}
/*
 PHP 转 ASCII
 require_once "ascii_class.php";
*/
$aa = new ascii;
echo "<xmp>";
echo $str = $aa->encode("PHP编程:3water.com");
echo "</xmp>";
echo $aa->decode($str);
?>
PHP 相关文章推荐
php正则校验用户名介绍
Jul 19 PHP
php empty函数 使用说明
Aug 10 PHP
PHP iconv 函数转gb2312的bug解决方法
Oct 11 PHP
PHP中“简单工厂模式”实例代码讲解
Sep 04 PHP
PHP命名空间(Namespace)的使用详解
May 04 PHP
php通过ajax实现双击table修改内容
Apr 28 PHP
PHP往XML中添加节点的方法
Mar 12 PHP
详解PHP中的Traits
Jul 29 PHP
浅谈PHP中try{}catch{}的使用方法
Dec 09 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 PHP
Yii框架视图、视图布局、视图数据块操作示例
Oct 14 PHP
PHP中Notice错误常见解决方法
Apr 28 #PHP
PHP实现查询手机归属地的方法详解
Apr 28 #PHP
PHP中Cookie的使用详解(简单易懂)
Apr 28 #PHP
PHP解决中文乱码
Apr 28 #PHP
PHP中常用的魔术方法
Apr 28 #PHP
PHP实现Unicode编码相互转换的方法示例
Nov 17 #PHP
PHP实现文件下载【实例分享】
Apr 28 #PHP
You might like
在同一窗体中使用PHP来处理多个提交任务
2008/05/08 PHP
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
php提交post数组参数实例分析
2015/12/17 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
js类中获取外部函数名的方法与代码
2007/09/12 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
jQuery Validate表单验证深入学习
2015/12/18 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
2016/09/23 Javascript
bootstrap laydate日期组件使用详解
2017/01/04 Javascript
详解Angular CLI + Electron 开发环境搭建
2017/07/20 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
解决node终端下运行js文件不支持ES6语法
2020/04/04 Javascript
vue总线机制(bus)知识点详解
2020/05/10 Javascript
javascript实现评分功能
2020/06/24 Javascript
django model去掉unique_together报错的解决方案
2016/10/18 Python
使用python socket分发大文件的实现方法
2019/07/08 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
django foreignkey外键使用的例子 相当于left join
2019/08/06 Python
通过实例简单了解Python中yield的作用
2019/12/11 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
Jacadi Paris美国官方网站:法国童装品牌
2017/10/15 全球购物
客服文员岗位职责
2013/11/29 职场文书
电钳工人个人求职信
2014/05/10 职场文书
党的群众路线教育实践活动党员个人剖析材料
2014/10/08 职场文书
出差报告范文
2014/11/06 职场文书
个人先进材料范文
2014/12/30 职场文书
怎样写离婚协议书
2015/01/26 职场文书
小数乘法教学反思
2016/02/22 职场文书
Nginx中break与last的区别详析
2021/03/31 Servers
pytorch中Schedule与warmup_steps的用法说明
2021/05/24 Python
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python
浅谈克隆 JavaScript
2021/11/02 Javascript
Python使用pyecharts控件绘制图表
2022/06/05 Python