当前位置:  编程技术>php
本页文章导读:
    ▪php chr() ord()中文截取乱码问题解决方法       代码如下:<?php $lenth = 19; $str = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?"; echo strlen($str)<=$lenth ? $str : (substr($str,0,$lenth).chr(0)."...."); ?> 代码如下:<? /* @ 另一种.........
    ▪wiki-shan写的php在线加密的解密程序       对应的写了一个简单的解密的,专门针对eval。这个原理很有用途的,在这里记下。 代码如下:<?php /* author:zhiwushan date:20080411 */   //已经加密的文件内容 $a=" eval(gzinflate(str_rot13(base64_decode('D.........
    ▪php单件模式结合命令链模式使用说明       可能对于部分人来说,文章内容过于浅显,这是送给初学者的教程,因为时间比较紧(要陪老婆逛街,呵呵),其中出现了设计不规范的,代码书写不规范的,bug等等还望各路大侠指出来,方便大家共同.........

[1]php chr() ord()中文截取乱码问题解决方法
    来源: 互联网  发布时间: 2013-11-30
代码如下:

<?php
$lenth = 19;
$str = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?";
echo strlen($str)<=$lenth ? $str : (substr($str,0,$lenth).chr(0)."....");
?>

代码如下:

<?
/*
@ 另一种方法,使用ord()函数:
@ 适用于 gb2312 编码:
*/
$str = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?";
function gb2312_substr($str, $limit) {
$restr ='';
for($i=0;$i< $limit-3;$i++) {
$restr .= ord($str[$i])>127 ? $str[$i].$str[++$i] : $str[$i];
}
return $restr;
}
/*
@ 以下仅适用于 utf-8 编码;
*/
function utf8_substr($str, $limit) {
$restr = '';
for($i=0;$i< $limit-3;$i++) {
$restr .= ord($str[$i])>127 ? $str[$i].$str[++$i].$str[++$i] : $str[$i];
}
return $restr;
}
//解释下上面第一个:chr(0)不是null,null是什么都没有,而chr(0)的值是0。表示成16进制是0x00,表示成二进制是00000000虽然chr(0)不会显示出什么,但是他是一个字符。虽然chr(0)不会显示出什么,但是他是一个字符。当汉字被截断时,根据编码规则他总是要把后边的其他字符拉过来一起作为汉字解释,这就是出现乱码的原因。
?>

    
[2]wiki-shan写的php在线加密的解密程序
    来源: 互联网  发布时间: 2013-11-30
对应的写了一个简单的解密的,专门针对eval。这个原理很有用途的,在这里记下。
代码如下:

<?php
/*
author:zhiwushan
date:20080411
*/
 
//已经加密的文件内容
$a="
eval(gzinflate(str_rot13(base64_decode('DdNUsptVAADQq2vn7+oFGU6VPb+EyE4EiSA2LhAZUZN2OP343eF9//f7+1S+Jd1KbNZ90SVY/jUv098JLgT1lSZmztJ/s/wNs/zrp5jd/XZLrter6I6UEqkkshUXmfWmEQNnhJfcdH7qCvlmY60ku0QVlfMMSUMnMO5EAo7RTF3GKem+RGMeDAg96YCxmZf+wUVdJUVUJTyId9BivvZlTpv64zYb80BDE2znHTa/CFBbxGMa66VW9ucZl6uTunr8bXPRSB+ziagCm+pJxOtHPbpOJarMvXb8XjD1B7RMGC/g0vsFnElCvW7KUD1OLRPt7MPJPVJpwW/vnS0l1TnALytgP5GMZt1IdEWat3XONVendoWF5ZbuJcdYIIeNfxeNsX74gMnpTZgoBByrZo/1ZZ9CmjIktXDBdoe4X+JigbtDgnlXWxJDa6i/hh7MtRibAPdhFxwldbPEonbZdfSeK8XNzFTB501FlIcFB8Oo+W8dOYmQeSf3P6q6SQx4KeEAZ2Y6Cnm6OeHMEOqBkkvIzXj08Jh5HMrXXMSHtz4Pk1wvV2kTDlDZoxjKTzdb7XpcMzPXDvIW6gfYsdcJz93w2hFQsQRQliFwK82cblUfV+CQHU+73AT7PL3fKMHXa0ZJtpLVZ7bEPGE/yIO1Wmelx/LiUXU+Ikv9ZwLyRWRYZ32ElLZCdmBIcUAfFlAl+pwdrpiucej6AA68JfQJfJuIhmQOqk9UHlJl2Ufp5tKbM+PYBU504baq0nurFEj1cXYaPtGOKimjKzIOJ4rHWXCvP2SZ04MsA4qbNkYwm3xqIk6VWKLLC659Hwxc+DQN75dIOfd9K/asb3ldWzcZ/0dwzUqGbNfs9uTnD+xRQRp1g5dK9loQMQk3amvCjyrdCzuYVHqsVTayHr58EMmM+807dukI4bTEMgRtxk+YIdqA0BfjrtAQLuBvZtHHsRPzvN2Q02hCn121Z2ETWe0nDACMxhhu//Pn569/vv8t/R8='))));
";
echo decodephp($a);
 
function decodephp($a) {
    $max_level=300; //最大层数
    for($i=0;$i<$max_level;$i++) {
        ob_start();
        eval(str_replace('eval','echo',$a));
        $a = ob_get_clean();
        if(strpos($a,'eval(gzinflate(str_rot13(base64_decode')===false) {
            return $a;
        }
    }
}
?>

    
[3]php单件模式结合命令链模式使用说明
    来源: 互联网  发布时间: 2013-11-30
可能对于部分人来说,文章内容过于浅显,这是送给初学者的教程,因为时间比较紧(要陪老婆逛街,呵呵),其中出现了设计不规范的,代码书写不规范的,bug等等还望各路大侠指出来,方便大家共同进步.本人水平有限.^_^

相信大家都已经读过很多关于在php中应用设计模式的书籍或是文章,但是很少有直接给予实例,大部分看完之后有种迷迷糊糊的感觉,如果没有项目实践,很难将设计模式部分弄清楚.

为避免代码过于复杂.没有添加异常处理等内容.
单件模式以及命令链模式的基础知识,大家自己google一下.不详细讲了.下面直接看实例:
代码如下:

<?php
/*
*@author:NoAngels
*@time:08年08月30日
*/
interface IRunAction{
//获取类中定义的可以被APP中run的方法
static function LoadActions();
//类中的入口函数调用该类中其他函数用
function runAction($action, $args);
}
/*
*APP类系统的核心部分
*/
class APP{
static private $__instance = null;
static private $__commands = array();
static private $__flag = 1;
private function __construct(){}
//单件模式设计获取该类的唯一实例
static function Load(){
if(self::$__instance == null) self::$__instance = new APP;
return self::$__instance;
}
//添加命名到APP的$__instance中每次添加新命令的时候检查是否之前已经添加过一个该类的实例
//如果有就忽略操作如果没有就添加进来
public function addCommand($cmdName){
foreach(self::$__commands as $cmd){
if(strtolower(get_class($cmd)) == strtolower(get_class($cmdName))){
self::$__flag = 0;
break;
}
}
if(self::$__flag == 1) self::$__commands[] = $cmdName;
self::$__flag = 1;
}
//命令链模式设计的核心部分调用实例的入口函数
//首先检查是否在类中允许调用该操作如果没有就提示未定义操作退出
public function runCommand($action, $args){
self::$__flag = 0;
foreach(self::$__commands as $cmd){
if(in_array($action, $cmd->LoadActions())){
self::$__flag = 1;
$cmd->runAction($action, $args);
}
}
if(self::$__flag == 0){
self::$__flag = 1;
exit("undefined action by action : $action");
}
}
//删除某个类的实例,只要指定类的名字即可
public function removeCommand($className){
foreach(self::$__commands as $key=>$cmd){
if(strtolower(get_class($cmd)) == strtolower($className)){
unset(self::$__commands[$key]);
}
}
}
//供大家测试用看看是否添加以及删除成功
public function viewCommands(){
echo(count(self::$__commands));
}
}
//类User实现接口IRunAction
class User implements IRunAction{
//定义可以调用的操作
static private $__actions = array('addUser', 'modifyUser', 'removeUser');
//获取可以调用的操作,实际过程中不要直接就爱你个$__actions设计成public调用
//而应该设计一个LoadActions函数获取$__actions的值
static public function LoadActions(){
return self::$__actions;
}
//运行指定函数
public function runAction($action, $args){
//不明白这个函数使用的可以参看手册
call_user_func(array($this,$action), $args);
}
//测试函数而已
protected function addUser($name){
echo($name);
}
}
//类Test同类User
class Test implements IRunAction{
static private $__actions = array('addTest', 'modifyTest', 'removeTest');
static public function LoadActions(){
return self::$__actions;
}
public function runAction($action, $args){
call_user_func(array($this,$action), $args);
}
protected function addTest($name){
echo($name);
}
}
//以下是测试代码
APP::Load()->addCommand(new User);
APP::Load()->addCommand(new User);
APP::Load()->addCommand(new User);
APP::Load()->addCommand(new User);
APP::Load()->runCommand('addUser', 'NoAngels');
APP::Load()->addCommand(new Test);
APP::Load()->runCommand('addTest', null);

APP类用单件模式设计,它是系统的核心部分.相信大家看代码就知道了Load方法是载入APP类实例,相当于有些书籍中的getInstance静态方法.他有addCommand,runCommand,removeCommand三个public方法.runCommand是核心部分.同时也是命令链模式的核心启动程序.具体实现请看源代码.代码写的已经很清楚了,就此不再赘述.
类User,Test实现了接口IRunAction,这两个类中都定义了一个静态私有变量$__actions,为一数组,其中包含了可以被APP的runCommand函数调用的操作.

下面是系统的运行流程:

APP启动
-------addCommand,将将要运行的操作所属的类添加到APP中.如果添加的类是用单件模式设计的.可以如下添加addCommand(SingletonClass::Load()).否则可以如下调

addCommand(new someClass)
-------runCommand.运行操作.比如在User类中有一操作addUser.我直接可以启用runCommand($acttion, $args).在APP中循环遍历$__commands数组,如果其中某个类的实例拥有该操作,就调用该实例的runAction函数.如果你没有将某个类的实例利用addCommand添加进来,就提示未定义操作,退出.
在类User和类Test中的runAction调用了call_user_func这个非常使用的函数.调用该类中对应函数.

提示:讲解与实例部分就到此了,具体你怎么理解,以及如何将该思想利用,就看你自己的理解,凡事必须自己动手才行.(ps:可以做成框架中的单一入口文件,实不实现MVC就看你自己是怎么想的了.)

实际运行效果如下:

限于语文水平,有什么不理解的可以联系我.
以后有时间了再给大家写点文章.


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3