字符处理集合MST_String

字体大小: 中小 标准 ->行高大小: 标准

mbstring是PHP一个十分好用的类库,其实他的功能已经比iconv要强大,前些天有个程序员用iconv转编码碰到问题,报bug,查了2个小时无法修复,我建议他,换mbstring的方法试试,问题迎刃而解。
以下String处理集,支持准确长度(字节长度和字符宽度)的任意字符集的截取,绝对不会出现乱码,其实都应该归功于mbstring。

 

<?php

class MST_String {

 const
  DET_HIGHLIGHT = '<span class="mst-str-highlight">%s</span>';

 protected static
  $_loadStr = array();

 /**
  * 获取跟定字符串的字节长度
  */
 static public function length($str) {
  return mb_strlen($str, PROJECT_ENCODE);
 }
 
 /**
  * 获取跟定字符串的字符长度
  */
 static public function width($str) {
  return mb_strwidth($str, PROJECT_ENCODE);
 }
 
 /**
  * 按字节长度截取指定字符串
  */
 static public function cut($str, $length, $suffix = '...') {
  $strLen = mb_strlen($str, PROJECT_ENCODE);
  $suffixLen = mb_strlen($suffix, PROJECT_ENCODE);
  if ($strLen <= $length || $strLen <= $suffixLen)
   return $str;
  return (mb_substr($str, 0, $length - $suffixLen, PROJECT_ENCODE)) . $suffix;
 }
 
 /**
  * 按字符长度截取指定字符串
  */
 static public function widthCut($str, $width, $suffix = '...') {
  $strWidth = mb_strwidth($str, PROJECT_ENCODE);
  $suffixWidth = mb_strwidth($suffix, PROJECT_ENCODE);
  if ($strWidth <= $width || $strWidth <= $suffixWidth)
   return $str;
  $newStr = mb_strimwidth($str, 0, $width, $suffix, PROJECT_ENCODE);
  return $newStr;
 }
 
 /**
  * 驼峰命名
  */
 static public function camelize($val, $split = '_', $firstUpper = true) {
  if ($val == null) return $val;
  if (strpos($val, $split) === false) return ($firstUpper ? ucfirst($val) : $val);
  $val = str_replace('_', ' ', $val);
  $val = ucwords($val);
  $val = str_replace(' ', null, $val);
  if (!$firstUpper)
   $val = lcfirst($val);
  return $val;
 }
 
 /**
  * 反驼峰
  */
 static public function tableize($val, $split = '_') {
  $val = preg_replace('/([A-Z]{1})/e', '\'_\' . strtolower(\'\\1\')', $val);
  if ($val{0} == '_') $val = substr($val, 1);
  return $val;
 }
 
 /**
  * 日期转日期的unix timestamp
  */
 static public function date2num($date) {
  $parse = date_parse($date);
  return mktime($parse['hour'], $parse['minute'], $parse['second'], $parse['month'], $parse['day'], $parse['year']);
 }
 
 /**
  * 生成字符缓存
  */
 static public function buildStrCache($type) {
  $name = "String/{$type}";
  $file = MST_Core::getPathOf($name, MST_Core::P_LIB, '.txt');
  if (is_file($file)) {
   $str = file_get_contents($file);
   $strAry = explode("\r\n", $str);
   $result = array();
   foreach ($strAry as $line) {
    $items = explode(',',$line);
    for ($i = 1; $i < count($items);$i++) {
     $result[$items[$i]] = $items[0];
    }
   }
   return file_put_contents(MST_Core::getPathOf($name, MST_Core::P_LIB, '.php'), "<?php\r\nreturn ".var_export($result, 1).";");
  }
  return false;
 }
 
 /**
  * 读取字符缓存
  */
 static public function getStrCache($type) {
  if (!isset(self::$_loadStr[$type])) {
   $file = 'String/' . $type;
   self::$_loadStr[$type] = MST_Core::import($file, MST_Core::P_LIB, '.php');
  }
  return self::$_loadStr[$type];
 }
 
 /**
  * 字符替换
  */
 static public function charReplace($str, $type) {
  if ($typeWords = self::getStrCache($type)) {
   return str_replace(array_keys($typeWords), array_values($typeWords), $str);
  }
  return $str;
 }
 
 /**
  * 生成指定字符内容的摘要信息
  */
 static public function summary($content, $len = 256) {
  $content = nl2br($content);
  $content = strip_tags($content);
  $content = str_replace('&nbsp;', ' ', $content);
  $content = trim($content);
  $content = preg_replace('/([\r\n]+|[\s]{2,})/i', ' ', $content);
  $content = MST_String::cut($content, $len);
  return $content;
 }
}

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/29964.html