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 相关文章推荐
编译问题
Oct 09 PHP
社区(php&amp;&amp;mysql)六
Oct 09 PHP
PHP similar_text 字符串的相似性比较函数
May 26 PHP
php 冒泡排序 交换排序法
May 10 PHP
深入file_get_contents函数抓取内容失败的原因分析
Jun 25 PHP
Memcached常用命令以及使用说明详解
Jun 27 PHP
php图片缩放实现方法
Feb 20 PHP
PHP连接MySQL的2种方法小结以及防止乱码
Mar 11 PHP
PHP函数extension_loaded()用法实例
Jan 19 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
Jul 14 PHP
centos 7.2下搭建LNMP环境教程
Nov 20 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
Mar 08 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用数组返回无限分类的列表数据的代码
2010/08/08 PHP
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
2011/08/22 PHP
自定义php类(查找/修改)xml文档
2013/03/26 PHP
php 强制下载文件实现代码
2013/10/28 PHP
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
javascript 兼容鼠标滚轮事件
2009/04/07 Javascript
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
用队列模拟jquery的动画算法实例
2015/01/20 Javascript
在for循环中length值是否需要缓存
2015/07/27 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
2017/03/30 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
2017/04/13 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
Bootstrap Table从零开始
2017/06/30 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
2018/07/05 Javascript
ndm:NPM的桌面GUI应用程序
2018/10/15 Javascript
python3.4用循环往mysql5.7中写数据并输出的实现方法
2017/06/20 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
bluepy 一款python封装的BLE利器简单介绍
2019/06/25 Python
Python如何重新加载模块
2020/07/29 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
scrapy-splash简单使用详解
2021/02/21 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
经典C++面试题一
2016/11/06 面试题
初中美术教学反思
2014/01/29 职场文书
什么样的创业计划书可行性高?
2014/02/01 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
服务明星事迹材料
2014/12/29 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
督导岗位职责范本
2015/04/10 职场文书
资料员岗位职责范本
2015/04/13 职场文书
2015年营业员工作总结
2015/04/23 职场文书
安全承诺书格式范本
2015/04/28 职场文书
canvas多重阴影发光效果实现
2021/04/20 Javascript