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与MYSQL中UTF8 中文排序示例代码
Oct 23 PHP
PHP开发Apache服务器配置
Jul 15 PHP
Symfony学习十分钟入门经典教程
Feb 03 PHP
jquery不支持toggle()高(新)版本的问题解决
Sep 24 PHP
php 二维数组时间排序实现代码
Nov 19 PHP
php实现的网页版剪刀石头布游戏示例
Nov 25 PHP
详解Yii实现分页的两种方法
Jan 14 PHP
降低PHP Redis内存占用
Mar 23 PHP
php 数据结构之链表队列
Oct 17 PHP
PHP实现网站应用微信登录功能详解
Apr 11 PHP
Laravel使用RabbitMQ的方法示例
Jun 18 PHP
Laravel 框架返回状态拦截代码
Oct 18 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
第七节 类的静态成员 [7]
2006/10/09 PHP
php socket方式提交的post详解
2008/07/19 PHP
PHP PDO函数库详解
2010/04/27 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
2013/01/19 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
2017/07/03 PHP
使用composer命令加载vendor中的第三方类库 的方法
2019/07/09 PHP
JavaScript数字和字符串转换示例
2014/03/26 Javascript
JQuery基础语法小结
2015/02/27 Javascript
jQuery中dom元素上绑定的事件详解
2015/04/24 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
jQuery隐藏和显示效果实现
2016/04/06 Javascript
Bootstrap前端开发案例一
2016/06/17 Javascript
微信小程序实现倒计时60s获取验证码
2020/04/17 Javascript
jQuery实现简单的回到顶部totop功能示例
2017/10/16 jQuery
vue初尝试--项目结构(推荐)
2018/01/30 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
JS实现HTML页面中动态显示当前时间完整示例
2018/07/30 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
Python中map和列表推导效率比较实例分析
2015/06/17 Python
Python将多份excel表格整理成一份表格
2018/01/03 Python
python获取代理IP的实例分享
2018/05/07 Python
Python for循环中的陷阱详解
2018/07/13 Python
详解Python3定时器任务代码
2019/09/23 Python
详解CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
2016/12/20 HTML / CSS
CSS3使用transition属性实现过渡效果
2018/04/18 HTML / CSS
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
小学优秀教育工作者事迹材料
2014/05/09 职场文书
护校行动方案
2014/05/31 职场文书
爱国主义教育演讲稿
2014/08/26 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
初中生活随笔
2015/08/15 职场文书
医院中层管理人员培训心得体会
2016/01/11 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python