当前位置:  编程技术>php
本页文章导读:
    ▪完美解决dedecms中的[html][/html]和[code][/code]问题       终于解决了完美解决dedecms中的[html][/html]和[code][/code]问题,因为我的php不太熟练,所以正则搞了好几天,才能好,这次主要修改了discuz5.5和dedecms3.1的运行功能和code功能,好开心啊,开始新.........
    ▪自动生成文章摘要的代码[PHP 版本]       实现内容:截断一段含有HTML代码的文本,但是不会出现围堵标记没有封闭的问题。 说明:这是PHP版的,用于在服务器端使用,如果你需要一个客户端版的,请阅读下一篇  我们在写BLOG这样.........
    ▪关于BIG5-HKSCS的解决方法       非常苦悶地發現,原來一直困擾的HKSCS問題PHP一直也支持。只不過名稱不叫HK-SCS,叫BIG5-HKSCS。 以下是HK增補字符集的解決方案: HTML頁面設為UTF-8, 寫入數據庫前先:iconv('big5-hkscs','utf8', $st.........

[1]完美解决dedecms中的[html][/html]和[code][/code]问题
    来源: 互联网  发布时间: 2013-11-30
终于解决了完美解决dedecms中的[html][/html]和[code][/code]问题,因为我的php不太熟练,所以正则搞了好几天,才能好,这次主要修改了discuz5.5和dedecms3.1的运行功能和code功能,好开心啊,开始新站的数据转移工作和新站模版制作了,到时候一个全新的了,如果有问题,大家可以交流下,现在blueidea和51js和dedecms的论坛问这个问题他们没有回答,但不影响效果,也让我自己学到了东西。

    
[2]自动生成文章摘要的代码[PHP 版本]
    来源: 互联网  发布时间: 2013-11-30
实现内容:截断一段含有HTML代码的文本,但是不会出现围堵标记没有封闭的问题。
说明:这是PHP版的,用于在服务器端使用,如果你需要一个客户端版的,请阅读下一篇 
我们在写BLOG这样的程序时经常需要显示文章前一部分的,但是又怕不恰当的截断破坏封闭标签以造成整个文档结构破坏,使用我的函数可以在要求不高的情况下解决这个问题。
大家应该考虑这个函数在服务端应用还是在客户端应用。因为我考虑这个函数可能运行起来比较费机器,所以安全性要求不高的情况下可以放在客户端上。
最好数据表中单独一个字段放这个摘要,这样相应的数据库查询也优化了。牺牲一点点空间换很多时间还是划算的。
再聊一下安全性问题,主要是内容安全性。如果客户端意图更改正常的摘要信息的话,一般都是BLOG的主人才有这个权力,那么他使得摘要和原文的一致性破坏就是他自己的事了。内容以外的安全性都可以在服务端解决。所以还是推荐在客户端使用本函数。
核心代码

代码如下:

// PHP 4.3 or above needed 
define("BRIEF_LENGTH", 800);     //Word amount of the Briefing of an Article 
function Generate_Brief($text){ 
  global $Briefing_Length; 
  if(strlen($text) <= BRIEF_LENGTH ) return $text;    
  $Foremost = substr($text, 0, BRIEF_LENGTH); 
  $re = "/<(\/?)(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|OBJECT|A|UL|OL|LI|BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT|SPAN)[^>]*(>?)/i"; 
  $Single = "/BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT/i";    
  $Stack = array(); $posStack = array(); 
  preg_match_all($re,$Foremost,$matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE); 
  /*   [Child-matching Specification]: 
    $matches[$i][1] : A "/" charactor indicating whether current "<...>" Friction is Closing Part 
    $matches[$i][2] : Element Name. 
    $matches[$i][3] : Right > of a "<...>" Friction   */ 
  for($i = 0 ; $i < count($matches); $i++){ 
    if($matches[$i][1][0] == ""){ 
        $Elem = $matches[$i][2][0]; 
        if(preg_match($Single,$Elem) && $matches[$i][3][0] !=""){ 
          continue; 
        } 
        array_push($Stack, strtoupper($matches[$i][2][0])); 
        array_push($posStack, $matches[$i][2][1]);          
        if($matches[$i][3][0] =="") break; 
    }else{ 
        $StackTop = $Stack[count($Stack)-1]; 
        $End = strtoupper($matches[$i][2][0]); 
        if(strcasecmp($StackTop,$End)==0){ 
          array_pop($Stack); 
          array_pop($posStack); 
          if($matches[$i][3][0] ==""){ 
            $Foremost = $Foremost.">"; 
          } 
        } 
    }      
  } 
  $cutpos = array_shift($posStack) - 1;    
  $Foremost = substr($Foremost,0,$cutpos); 
  return $Foremost; 
}; 
若遇到问题(发现上面的函数对多字节字符集支持得不好) 不烦试试下面的这个!

代码如下:

function Generate_Brief($text){ 
  global $Briefing_Length; 
  mb_regex_encoding("UTF-8"); 
  if(mb_strlen($text) <= BRIEF_LENGTH ) return $text;    
  $Foremost = mb_substr($text, 0, BRIEF_LENGTH); 
  $re = "<(\/?)(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|OBJECT|A|UL|OL|LI|BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT|SPAN)[^>]*(>?)"; 
  $Single = "/BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT|BR/i";    
  $Stack = array(); $posStack = array(); 
  mb_ereg_search_init($Foremost, $re, 'i'); 
  while($pos = mb_ereg_search_pos()){ 
    $match = mb_ereg_search_getregs(); 
    /*   [Child-matching Formulation]: 
        $matche[1] : A "/" charactor indicating whether current "<...>" Friction is Closing Part 
        $matche[2] : Element Name. 
        $matche[3] : Right > of a "<...>" Friction    
    */ 
    if($match[1]==""){ 
        $Elem = $match[2]; 
        if(mb_eregi($Single, $Elem) && $match[3] !=""){ 
          continue; 
        } 
        array_push($Stack, mb_strtoupper($Elem)); 
        array_push($posStack, $pos[0]);          
    }else{ 
        $StackTop = $Stack[count($Stack)-1]; 
        $End = mb_strtoupper($match[2]); 
        if(strcasecmp($StackTop,$End)==0){ 
          array_pop($Stack); 
          array_pop($posStack); 
          if($match[3] ==""){ 
            $Foremost = $Foremost.">"; 
          } 
        } 
    } 
  } 
  $cutpos = array_shift($posStack) - 1;    
  $Foremost = mb_substr($Foremost,0,$cutpos,"UTF-8"); 
  return $Foremost; 
}; 

    
[3]关于BIG5-HKSCS的解决方法
    来源: 互联网  发布时间: 2013-11-30
非常苦悶地發現,原來一直困擾的HKSCS問題PHP一直也支持。只不過名稱不叫HK-SCS,叫BIG5-HKSCS。
以下是HK增補字符集的解決方案:
HTML頁面設為UTF-8,
寫入數據庫前先:iconv('big5-hkscs','utf8', $string)
需轉為UNICODE就用以下函數
function String2Unicode($data, $language)
{
 $data = nl2br(trim($data));
 $data = str_replace('<br />',chr(13),$data);
 $str = '';
 preg_match_all("/[\x80-\xff]?./",$data,$ar);
 debug($ar); 
 foreach($ar[0] as $v)
 {
  if($v != '' && $v!=chr(13))
  {
   $str .= "".utf82unicode(iconv($language,"UTF-8",$v)).";";
  }else {
   $str .=$v;
  }
 }
 return $str;
}
function utf82unicode($c) {
 switch(strlen($c)) {
  case 1:
   return ord($c);
  case 2:
   $n = (ord($c[0]) & 0x3f) << 6;
   $n += ord($c[1]) & 0x3f;
   return $n;
  case 3: 
   $n = (ord($c[0]) & 0x1f) << 12;
   $n += (ord($c[1]) & 0x3f) << 6;
   $n += ord($c[2]) & 0x3f;
   return $n;
  case 4:
   $n = (ord($c[0]) & 0x0f) << 18;
   $n += (ord($c[1]) & 0x3f) << 12; 
   $n += (ord($c[2]) & 0x3f) << 6;
   $n += ord($c[3]) & 0x3f;
   return $n;
 }
}

    
最新技术文章:
▪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