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连接Oracle数据库
Oct 09 PHP
php与java通过socket通信的实现代码
Oct 21 PHP
php使用mkdir创建多级目录入门例子
May 10 PHP
PHP原生函数一定好吗?
Dec 08 PHP
PHP合并discuz用户脚本的方法
Aug 04 PHP
PHP中list()函数用法实例简析
Jan 08 PHP
基于PHP制作验证码
Oct 12 PHP
PHP静态成员变量和非静态成员变量详解
Feb 14 PHP
php获取给定日期相差天数的方法分析
Feb 20 PHP
PHP简单实现二维数组的矩阵转置操作示例
Nov 24 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
Oct 24 PHP
php实现自动生成验证码的实例讲解
Nov 17 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中array_multisort对多维数组排序的方法
2020/06/21 PHP
PHP实现支持加盐的图片加密解密
2016/09/09 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
JavaScript入门学习书籍推荐
2008/06/12 Javascript
javascript unicode与GBK2312(中文)编码转换方法
2013/11/14 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
原生js实现日期联动
2015/01/12 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
2015/11/24 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
2015/11/25 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
2016/11/20 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
JavaScript数组复制详解
2017/02/02 Javascript
JavaScript轮播图简单制作方法
2017/02/20 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
2017/09/18 NodeJs
又拍云 Node.js 实现文件上传、删除功能
2018/10/28 Javascript
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
vue地址栏直接输入路由无效问题的解决
2018/11/15 Javascript
angularjs1.X 重构controller 的方法小结
2019/08/15 Javascript
js设计模式之单例模式原理与用法详解
2019/08/15 Javascript
vue + axios get下载文件功能
2019/09/25 Javascript
ES6之Proxy的get方法详解
2019/10/11 Javascript
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
[00:55]深扒TI7聊天轮盘语音出处3
2017/05/11 DOTA
使用IPython或Spyder将省略号表示的内容完整输出
2020/04/20 Python
马来西亚在线药房:RoyalePharma
2019/12/01 全球购物
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
《王二小》教学反思
2014/02/27 职场文书
毕业生面试求职信
2014/06/23 职场文书
二年级上册数学教学计划
2015/01/20 职场文书
千手观音观后感
2015/06/03 职场文书