Php judge String Length strlen () and mb_strlen () functions-PHP source code

Source: Internet
Author: User
We know that to judge the string length in php, we only need to use the strlen () and mb_strlen () functions, but it is not as simple as we think, especially when it comes to a mix of Chinese and English, the above functions are a little inadequate. Let me introduce them to you. We know that to judge the string length in php, we only need to use the strlen () and mb_strlen () functions, but it is not as simple as we think, especially when it comes to a mix of Chinese and English, the above functions are a little inadequate. Let me introduce them to you.

Script ec (2); script

Strlen ()

PHP strlen () function

Definition and usage

The strlen () function returns the length of the string.

Syntax

Strlen (string)

Parameter: string
Description: required. Specifies the string to be checked.

The Code is as follows:


$ Str = 'Chinese character a 1 ';
Echo strlen ($ str );
Echo'
';
Echo mb_strlen ($ str, 'utf8 ');
// Output result
// 14
// 6
?>

Result Analysis: During strlen calculation, the Chinese character of UTF8 is 3 characters in length, so the length of "Chinese character a 1 character" is 3*4 + 2 = 14
When mb_strlen is calculated, if the selected inner code is UTF8, a Chinese character is regarded as 1 in length. Therefore, the length of "Chinese a character 1 character" is 6.


Mb_strlen () function

Note that mb_strlen is not a PHP core function. before using it, make sure that php_mbstring.dll is loaded in php. ini to ensure that

The Line "extension = php_mbstring.dll" exists and is not commented out. Otherwise, the number of undefined functions may occur.

The Code is as follows:

$ Str = 'Chinese character a 1 ';
// The calculation is as follows:
Echo (strlen ($ str) + mb_strlen ($ str, 'utf8')/2;
Echo
// Output result
// 10
?>

The strlen ($ str) Value of "Chinese character a 1 character" is 14, and the mb_strlen ($ str) value is 6, the placeholder Value of "Chinese character a 1 character" is 10.

Explain the differences between the two

The Code is as follows:


// During the test, the file encoding method is UTF8.

$ Str = 'Chinese character a 1 ';

Echo strlen ($ str ).'
'; // 14

Echo mb_strlen ($ str, 'utf8 ').'
'; // 6

Echo mb_strlen ($ str, 'gbk ').'
'; // 8

Echo mb_strlen ($ str, 'gb2312 ').'
'; // 10

?>

Result Analysis: During strlen calculation, the Chinese character of UTF8 is 3 characters in length, so the length of "Chinese character a 1 character" is 3*4 + 2 = 14, in mb_strlen

During calculation, if the selected inner code is UTF8, a Chinese character will be considered as the length of 1, so the length of "Chinese a character 1" is 6.


Although the above function can solve some mixed Chinese and English problems, it cannot be used in real time. Next I will introduce other good functions to you.

Method.

The PHP code for obtaining the length of a mix of Chinese and English strings is as follows: 1 Chinese = 1 bit, 2 English = 1 bit, you can modify it yourself

The Code is as follows:

/**
* PHP obtains the mixed length of strings in Chinese and English.
* @ Param $ str string
* @ Param $ charset string Encoding
* @ Return returns the length of 1 Chinese = 1 bits, 2 English = 1 bits
*/
Function strLength ($ str, $ charset = 'utf-8 '){
If ($ charset = 'utf-8') $ str = iconv ('utf-8', 'gb2312 ', $ str );
$ Num = strlen ($ str );
$ CnNum = 0;
For ($ I = 0; $ I <$ num; $ I ++ ){
If (ord (substr ($ str, $ I + 127)> ){
$ CnNum ++;
$ I ++;
}
}
$ EnNum = $ num-($ cnNum * 2 );
$ Number = ($ enNum/2) + $ cnNum;
Return ceil ($ number );
}

// The length of the test output is 15.
$ Str1 = 'test test test ';
$ Str2 = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ';
$ Str3 = 'aa test aa test aaaaa ';
Echo strLength ($ str1, 'gb2312 ');
Echo strLength ($ str2, 'gb2312 ');
Echo strLength ($ str3, 'gb2312 ');

Truncates string functions.

UTF8 encoding. In UTF8, a Chinese character occupies three bytes.

The Code is as follows:

Function msubstr ($ str, $ start, $ len ){
$ Tmpstr = "";
$ Strlen = $ start + $ len;
For ($ I = 0; $ I <$ strlen; $ I ++ ){
If (ord (substr ($ str, $ I, 1) & gt; 127 ){
$ Tmpstr. = substr ($ str, $ I, 3 );
$ I + = 2;
} Else
$ Tmpstr. = substr ($ str, $ I, 1 );
}
Return $ tmpstr;
}
Echo msubstr (" english );

GB2312 encoding. In gb2312, a Chinese character occupies 2 bytes.

The Code is as follows:

Function msubstr ($ str, $ start, $ len) {// response
$ Tmpstr = "";
$ Strlen = $ start + $ len;
If (preg_match ('/[/d/s] {2,}/', $ str) {$ strlen = $ strlen-2 ;}
For ($ I = 0; $ I <$ strlen; $ I ++ ){
If (ord (substr ($ str, $ I, 1)> 0xa0 ){
$ Tmpstr. = substr ($ str, $ I, 2 );
$ I ++;
} Else
$ Tmpstr. = substr ($ str, $ I, 1 );
}
Return $ tmpstr;
}

?>

Functions with good encoding compatibility

The Code is as follows:

Function cc_msubstr ($ str, $ start = 0, $ length, $ charset = "UTF-8", $ suffix = true)
{
If (function_exists ("mb_substr "))
Return mb_substr ($ str, $ start, $ length, $ charset );
Elseif (function_exists ('iconv _ substr ')){
Return iconv_substr ($ str, $ start, $ length, $ charset );
}
$ 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 );
$ Slice = join ("", array_slice ($ match [0], $ start, $ length ));
If ($ suffix) return $ slice ."... ";
Return $ slice;
}

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.