<php
header('content-type:text/html;charset=utf-8;');//utf-8编码,避免乱码
$str='2、小孩自费项目:香溪古堡 (08米以下免票,08—12米25元,12米以上50元)<br/>';
$data=array();//找到的数字放这里
$newdata=array();//替换的格式放这里
$num=preg_match_all("/[^](\d+\)\d+/",$str,$re,PREG_PATTERN_ORDER);//用正则表达式把数字全找出来
foreach($re['0'] as $value){
preg_match("/(\d+\)\d+/",$value,$value2);//会匹配到非& # 61618的字符,所以还要清除掉那些非& # 61618得字符
$data[]=$value2[0];
}
$data=array_unique($data);//清理相同值(避免重复替换)
foreach($data as $value)
$newdata[]="<span style=\"color:red\">{$value}</span>";
$str=str_replace($data,$newdata,$str);//替换
echo "{$str}<br/>";//输出测试
>
亲,在php53下通过测试,发现bug请告诉我,注释不够请追问哟!
在PHP中专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数并非PHP的核心函数,所以,它们常常有可能没有开启。要在phpini中开启即可。获取长度实例:1 ,utf-8环境下使用
header('Content-type:text/html;charset=utf-8');/
可以统计中文字符串长度的函数
@param $str 要计算长度的字符串
@param $type 计算长度类型,0(默认)表示一个中文算一个字符,1表示一个中文算两个字符
/
function abslength($str)
{
if(empty($str)){
return 0;
}
if(function_exists('mb_strlen')){
return mb_strlen($str,'utf-8');
}
else {
preg_match_all("//u", $str, $ar);
return count($ar[0]);
}
}
$str = '我们都是中国人啊,ye!';
$len = abslength($str);
var_dump($len); //return 12
$len = abslength($str,'1');
echo '<br />'$len; //return 22
/
utf-8编码下截取中文字符串,参数可以参照substr函数
@param $str 要进行截取的字符串
@param $start 要进行截取的开始位置,负数为反向截取
@param $end 要进行截取的长度
/
function utf8_substr($str,$start=0) {
if(empty($str)){
return false;
}
if (function_exists('mb_substr')){
if(func_num_args() >= 3) {
$end = func_get_arg(2);
return mb_substr($str,$start,$end,'utf-8');
}
else {
mb_internal_encoding("UTF-8");
return mb_substr($str,$start);
}
}
else {
$null = "";
preg_match_all("//u", $str, $ar);
if(func_num_args() >= 3) {
$end = func_get_arg(2);
return join($null, array_slice($ar[0],$start,$end));
}
else {
return join($null, array_slice($ar[0],$start));
}
}
}
$str2 = 'wo要截取zhongwen';
echo '<br />';
echo utf8_substr($str2,0,-4); //return wo要截取zhon
2,支持gb2312,gbk,utf-8,big5 中文截取方法
/
中文截取,支持gb2312,gbk,utf-8,big5
@param string $str 要截取的字串
@param int $start 截取起始位置
@param int $length 截取长度
@param string $charset utf-8|gb2312|gbk|big5 编码
@param $suffix 是否加尾缀
/
public function csubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)
{
if(function_exists("mb_substr"))
{
if(mb_strlen($str, $charset) <= $length) return $str;
$slice = mb_substr($str, $start, $length, $charset);
}
else
{
$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
preg_match_all($re[$charset], $str, $match);
if(count($match[0]) <= $length) return $str;
$slice = join("",array_slice($match[0], $start, $length));
}
if($suffix) return $slice"…";
return $slice;
}
PHP对中文字符串的处理一直困扰于刚刚接触PHP开发的新手程序员。下面简要的剖析一下PHP对中文字符串长度的处理:
(1)PHP自带的函数如strlen()、mb_strlen()都是通过计算字符串所占字节数来统计字符串长度的,一个英文字符占1字节;
(2)中文则不然,做中文网站一般会选择两种编码:gbk/gb2312或是utf-8。utf-8能兼容更多的字符,所以受到很多站长的喜爱。gbk与utf-8对中文的编码不同,导致中文在gbk与utf-8编码下所占字节也有差异。
1、把 GBK 编码字串转换成 UTF-8 编码字串 view plaincopy to clipboardprint <php header("content-Type: text/html; charset=Utf-8"); echo mb_convert_encoding("你是我的好朋友","UTF-8","GBK"); > 2、把 UTF-8 编码字串转换成 GB2312 编码字串 view plaincopy to clipboardprint // 注意将此文件存盘成 utf-8 编码格式文件再测试 <php header("content-Type:text/html;charset=gb2312"); echo mb_convert_encoding("你是我的好朋友","gb2312","utf-8"); > // 注意将此文件存盘成 utf-8 编码格式文件再测试 <php header("content-Type: text/html; charset=gb2312"); echo mb_convert_encoding("你是我的好朋友","gb312","utf-8"); > 3、对整个页面进行转换 该方法适用所有编码环境。这样把前128个字符以外(显示字符)的字符集都用 NCR(Numeric character reference,如“汉字”将转换成“汉字”这种形式)来表示,这样的编码在任意编码环境下页面都能正常显示。 在php文件的头部加上下面三行代码: view plaincopy to clipboardprint mb_internal_encoding(”gb2312″); // 这里的gb2312是你网站原来的编码 mb_>
以上就是关于php 获取字符串的数字全部的内容,包括:php 获取字符串的数字、php如何获取中文字符长度,一个中文字符算一个、PHP怎么获取字符串长度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)