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 相关文章推荐
模拟OICQ的实现思路和核心程序(一)
Oct 09 PHP
深入apache配置文件httpd.conf的部分参数说明
Jun 28 PHP
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
Apr 24 PHP
PHP中ini_set与ini_get用法实例
Nov 04 PHP
thinkphp3.x中变量的获取和过滤方法详解
May 20 PHP
基于PHP实现数据分页显示功能
May 26 PHP
php利用fsockopen GET/POST提交表单及上传文件
May 22 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
如何优雅的使用 laravel 的 validator验证方法
Nov 11 PHP
PHP如何防止XSS攻击与XSS攻击原理的讲解
Mar 22 PHP
PHP使用CURL实现下载文件功能示例
Jun 03 PHP
php和redis实现秒杀活动的流程
Jul 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静态新闻列表自动生成代码
2007/06/14 PHP
How do I change MySQL timezone?
2008/03/26 PHP
PHP设计模式之装饰器模式定义与用法简单示例
2018/08/13 PHP
Yii框架自定义数据库操作组件示例
2019/11/11 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
Node.js和MongoDB实现简单日志分析系统
2015/04/25 Javascript
微信小程序实现随机验证码功能
2018/12/20 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
Python的字典和列表的使用中一些需要注意的地方
2015/04/24 Python
在Python中使用元类的教程
2015/04/28 Python
Python实现从URL地址提取文件名的方法
2015/05/15 Python
Python ValueError: invalid literal for int() with base 10 实用解决方法
2015/06/21 Python
python实现识别相似图片小结
2016/02/22 Python
Python2与python3中 for 循环语句基础与实例分析
2017/11/20 Python
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
解决python3爬虫无法显示中文的问题
2018/04/12 Python
python使用udp实现聊天器功能
2018/12/10 Python
python根据字典的键来删除元素的方法
2020/08/16 Python
HTML5使用Audio标签实现歌词同步的效果
2016/03/17 HTML / CSS
澳大利亚最好的厨具店:Kitchen Warehouse
2018/03/13 全球购物
瑞士领先的网上超市:LeShop.ch
2018/11/14 全球购物
加拿大领先家居家具网上购物:Aosom.ca
2020/05/27 全球购物
网络教育自我鉴定
2014/02/04 职场文书
党的群众路线教育实践活动党员个人剖析材料
2014/10/08 职场文书
大学生档案自我鉴定(2篇)
2014/10/14 职场文书
教师年终个人总结
2015/02/11 职场文书
小学见习报告
2015/06/23 职场文书
公司车辆维修管理制度
2015/08/05 职场文书
物业保洁员管理制度
2015/08/05 职场文书
新学期小学班主任工作计划
2019/06/21 职场文书
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL
win10电脑双屏显示一个黑屏怎么办?win10电脑双屏显示一个黑屏解决方法
2022/07/15 数码科技