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(1)
Oct 09 PHP
收藏的一个php小偷的核心程序
Apr 09 PHP
set_include_path在win和linux下的区别
Jan 10 PHP
PHP6 mysql连接方式说明
Feb 09 PHP
Admin generator, filters and I18n
Oct 06 PHP
PHP 文件系统详解
Sep 13 PHP
解析CI的AJAX分页 另类实现方法
Jun 27 PHP
php防止伪造的数据从URL提交方法
Jun 27 PHP
PHP冒泡算法详解(递归实现)
Nov 10 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
Oct 27 PHP
php 解析xml 的四种方法详细介绍
Oct 26 PHP
laravel 框架配置404等异常页面
Jan 07 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
《雄兵连》系列首部大电影《烈阳天道》:可能是因为期望值太高了
2020/08/18 国漫
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
PHP number_format函数原理及实例解析
2020/07/14 PHP
JavaScript下申明对象的几种方法小结
2008/10/02 Javascript
jQuery 事件队列调整方法
2009/09/18 Javascript
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
Jquery颜色选择器ColorPicker实现代码
2012/11/14 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
JS获取html对象的几种方式介绍
2013/12/05 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
2015/04/14 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
深入理解jQuery3.0的domManip函数
2016/09/01 Javascript
js实现网页的两个input标签内的数值加减(示例代码)
2017/08/15 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
对Angular中单向数据流的深入理解
2018/03/31 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
浅谈js中的attributes和Attribute的用法与区别
2020/07/16 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
Python单元测试框架unittest使用方法讲解
2015/04/13 Python
Python中shutil模块的常用文件操作函数用法示例
2016/07/05 Python
django 发送邮件和缓存的实现代码
2018/07/18 Python
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
对Python函数设计规范详解
2019/07/19 Python
python retrying模块的使用方法详解
2019/09/25 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
Django之choices选项和富文本编辑器的使用详解
2020/04/01 Python
web页面录屏实现
2019/02/12 HTML / CSS
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
2012/06/05 面试题
物业管理求职自荐信
2013/09/25 职场文书
办公室经理岗位职责
2014/01/01 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书
使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
2021/04/07 HTML / CSS