㈠ php里如何截取英文和汉字为相同字符长度
<?php
$str1="str字符串";
$str2="strstrstrstr";
$str3="字符串字符串字符串";
echo mb_substr($str1,0,3,'utf-8')."<br>";
echo mb_substr($str2,0,3,'utf-8')."<br>";
echo mb_substr($str3,0,3,'utf-8')."<br>";
?>
前提是你的页面编码也是utf-8
㈡ php中如何限制字符长度以及如何去掉
用多字节mb_strlen()统计字符串的字符长度。
在用mb_substr()截取指定长度的字符。
代码中用名义上针对latin事实上针对byte字节的strlen, substr是不能正确截取非拉丁文字的(比如阿拉伯文、中文)
㈢ PHP怎么获取字符串长度
PHP对中文字符串的处理一直困扰于刚刚接触PHP开发的新手程序员。下面简要的剖析一下PHP对中文字符串长度的处理:
(1)PHP自带的函数如strlen()、mb_strlen()都是通过计算字符串所占字节数来统计字符串长度的,一个英文字符占1字节;
(2)中文则不然,做中文网站一般会选择两种编码:gbk/gb2312或是utf-8。utf-8能兼容更多的字符,所以受到很多站长的喜爱。gbk与utf-8对中文的编码不同,导致中文在gbk与utf-8编码下所占字节也有差异。
㈣ php如何获取中文字符长度,一个中文字符算一个
在PHP中专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数并非PHP的核心函数,所以,它们常常有可能没有开启。要在php.ini中开启即可。获取长度实例:1 ,utf-8环境下使用
header('Content-type:text/html;charset=utf-8');
/**
*可以统计中文字符串长度的函数
*@param$str要计算长度的字符串
*@param$type计算长度类型,0(默认)表示一个中文算一个字符,1表示一个中文算两个字符
*
*/
functionabslength($str)
{
if(empty($str)){
return0;
}
if(function_exists('mb_strlen')){
returnmb_strlen($str,'utf-8');
}
else{
preg_match_all("/./u",$str,$ar);
returncount($ar[0]);
}
}
$str='我们都是中国人啊,ye!';
$len=abslength($str);
var_mp($len);//return12
$len=abslength($str,'1');
echo'<br/>'.$len;//return22
/*
utf-8编码下截取中文字符串,参数可以参照substr函数
@param$str要进行截取的字符串
@param$start要进行截取的开始位置,负数为反向截取
@param$end要进行截取的长度
*/
functionutf8_substr($str,$start=0){
if(empty($str)){
returnfalse;
}
if(function_exists('mb_substr')){
if(func_num_args()>=3){
$end=func_get_arg(2);
returnmb_substr($str,$start,$end,'utf-8');
}
else{
mb_internal_encoding("UTF-8");
returnmb_substr($str,$start);
}
}
else{
$null="";
preg_match_all("/./u",$str,$ar);
if(func_num_args()>=3){
$end=func_get_arg(2);
returnjoin($null,array_slice($ar[0],$start,$end));
}
else{
returnjoin($null,array_slice($ar[0],$start));
}
}
}
$str2='wo要截取zhongwen';
echo'<br/>';
echoutf8_substr($str2,0,-4);//returnwo要截取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开发中,遇到需求需要截取字符串而不打断单词时,手册推荐的`mb_strimwidth()`函数未能满足预期。开发者自行实现了一种方法,利用`wordwrap()`函数打断单词并计算长度,以达到截取目的。下面是一个直观的实现过程:
在项目中,当遇到需要精确截取字符串而不打断单词的需求时,我尝试了PHP手册中的`mb_strimwidth()`函数,但未能如愿。于是,我自定义了一个函数,虽然存在小问题,但基本能完成任务。这个函数原理是先用`wordwrap()`函数将字符串拆分成单词,然后通过`mb_strlen()`计算单词长度,直到达到设定的截取长度。让我们通过一个示例来看一下这个过程:
原始字符串:
$str = 'readonly this boolean attribute indicates that the user cannot modify the value of the control. Unlike the disabled attribute, the readonly attribute does not prevent the user from clicking or selecting in the control. long ge blog’s The value of a read-only control is still submitted with the form.'
使用自定义函数截取100个字符:
echo wordcut($str, 100);
该函数的代码如下,主要用于英文字符串的截取,注意它不适用于中文,但可以通过调整来兼容:
php
function wordcut($string, $cutlength = 250, $replace = '…') {
if (mb_strlen($string) <= $cutlength) {
return $string;
} else {
$totalLength = 0;
$newwords = [];
$wrap = wordwrap($string, 1, "t");
$wraps = explode("t", $wrap);
foreach ($wraps as $tmp) {
$newwords[] = $tmp;
$totalLength += mb_strlen($tmp);
if ($totalLength >= $cutlength) {
break;
}
}
$str = trim(implode(" ", $newwords));
return empty($str) ? $str : $str . ' ' . $replace;
}
}
这个函数会确保在不超过指定长度的情况下,完整保留单词,如果超过则以省略号结尾。注意,目前它的一个小问题是 `$cutlength` 并非实际长度,而是单词总长度达到这个值时停止,忽略空格长度。在实际使用中,可以考虑进一步优化。
㈥ php哪个函数能取得字符串长度
对于PHP新手程序员来说,理解中文字符串长度的处理可能是个挑战。PHP内置的strlen()和mb_strlen()函数通常基于字节数来计算长度,对英文字符而言,一个字符占1字节。例如:
$e的味院京海留nStr = 'Hello,China!';
echo strlen($enStr); // 输出:12
然而,中文字符的编码情况不同。常见的中文编码有gbk/gb2312和utf-8。utf-8编码能容纳更多字符,因此更受欢迎。gbk和utf-8编码下,中文字符的字节数不同:gbk每个中文字符占2字节,utf-8占3字节。如:
$zhStr = '您好,中国!';
echo strlen($zhStr); // gbk编码:12
echo mb_strlen($zhStr, 'utf-8'); // utf-8编码:18
单纯除以字符占用的字节数来计算长度并不完全适用,因为实际的字符串常常包含中英文混合。一个常见的解决方案是在WordPress中,通过正则表达式将字符串分解为单个字符,然后计算字符个数来得到长度。以下是一个处理utf-8编码字符串的示例:
$zhStr = '您好,中国!';
$str = 'Hello,态守含乡席凯样司浓中国!';
// 计算中文字符串长度
function utf8_strlen($string = '') {
preg_match_all("/./us", $string, $match);
return count($match[0]);
}
echo utf8_strlen($zhStr); // 输出:6
echo utf8_strlen($str); // 输出:15
因此,对于包含中英文混合的utf-8编码字符串,使用正则分解并计算单元个数是更为准确的方法。对于其他编码的处理,则需要根据实际情况调整计算方式。
㈦ php中如何限制字符长度以及如何去掉
用多字节mb_strlen()统计字符串的字符长度。
在用mb_substr()截取指定长度的字符。
代码中用名义上针对latin事实上针对byte字节的strlen, substr是不能正确截取非拉丁文字的(比如阿拉伯文、中文)