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中static静态变量的使用方法详解
Jun 04 PHP
PHPCMS的使用小结
Sep 20 PHP
使用php判断浏览器的类型和语言的函数代码
Feb 28 PHP
php 读取文件头判断文件类型的实现代码
Aug 05 PHP
php中使用session防止用户非法登录后台的方法
Jan 27 PHP
phpMyAdmin安装并配置允许空密码登录
Jul 04 PHP
php验证码实现代码(3种)
Sep 07 PHP
如何使用php脚本给html中引用的js和css路径打上版本号
Nov 18 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
PHP下载文件的函数实例代码
May 18 PHP
php删除数组指定元素实现代码
May 03 PHP
thinkPHP3.2.2框架行为扩展及demo示例
Jun 19 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策略模式定义与用法示例
2017/07/27 PHP
实例讲解PHP表单处理
2019/02/15 PHP
JS中confirm,alert,prompt函数使用区别分析
2010/04/01 Javascript
javascript复制对象使用说明
2011/06/28 Javascript
JavaScript 垃圾回收机制分析
2013/10/10 Javascript
JavaScript怎么判断图片是否加载完成以便获取其尺寸
2014/05/08 Javascript
jQuery控制TR显示隐藏的几种方法
2014/06/18 Javascript
jQuery设置指定网页元素宽度和高度的方法
2015/03/25 Javascript
学习Bootstrap组件之下拉菜单
2015/07/28 Javascript
QQ登录背景闪动效果附效果演示源码下载
2015/09/22 Javascript
7个jQuery最佳实践
2016/01/12 Javascript
基于JavaScript实现点击页面任何位置返回
2016/08/31 Javascript
使用开源工具制作网页验证码的方法
2016/10/17 Javascript
基于JavaScript实现屏幕滚动效果
2017/01/18 Javascript
基于Vue.js实现tab滑块效果
2017/07/23 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
2017/11/21 Javascript
轻量级JS Cookie插件js-cookie的使用方法
2018/03/22 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
vue实现购物车选择功能
2020/01/10 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
python发布模块的步骤分享
2014/02/21 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
python os模块在系统管理中的应用
2020/06/22 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
综治宣传月活动总结
2014/04/28 职场文书
听课评语大全
2014/04/30 职场文书
小学数学教研活动总结
2014/07/01 职场文书
元旦晚会开场白
2015/05/29 职场文书
舌尖上的中国观后感
2015/06/02 职场文书
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS