Home > Backend Development > PHP Tutorial > PHP solves the problem of garbled Chinese characters intercepted by substr()

PHP solves the problem of garbled Chinese characters intercepted by substr()

高洛峰
Release: 2023-03-04 14:40:01
Original
1571 people have browsed it

In php, if I want to use substr() to intercept a string that is all in English, it will be no problem. If it includes Chinese or English, it will be a tragedy, but don’t worry, we can use other methods to solve it.

When php intercepts Chinese strings, garbled characters appear. This is a recent discovery. I have previously written an article about automatically generating meta information. That article was about using php to intercept the first few words of the article as description method, but IE6 cannot load CSS. Here is a supplement.

First of all, we need to clarify this problem. The reason why IE6 occasionally fails to load CSS is because the file is garbled, causing the subsequent link to load CSS to not be correctly parsed by IE6. So I saw a pure HTML page, no CSS, naked! After clarifying the problem, the remaining problem can be easily solved, which is to prevent garbled characters. Since the function provided by Wange has garbled characters, I found a new PHP function to solve this garbled code problem.

The substr() function can split text, but problems often occur if the text to be split includes Chinese characters.

mb_substr() The usage of this function is similar to substr(), except that one more parameter is added at the end to set the encoding of the string.

After reading this, you should understand the reason why I improved the Wange method~~

Here are some more advanced processing methods

Example 1

The code is as follows

function func_chgtitle($str,$len) { //$length我们允许字符串显示的最大长度 
 $tmpstr = "";
 $strlen = $len;
 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;
}
Copy after login

Example 2

The string is encoded as UTF-8, and one Chinese character occupies three bytes:

public static function chinesesubstr($str, $start, $len) { // $str refers to the string, $start refers to the starting position of the string, $len refers to the length of the string

$strlen = $start + $len; // Use $strlen to store the total length of the string, that is, from the starting position of the string to the total length of the string

The code is as follows

for($i = $start; $i < $strlen;) {
 if (ord ( substr ( $str, $i, 1 ) ) > 0xa0) { // 如果字符串中首个字节的ASCII序数
值大于0xa0,则表示汉字
 $tmpstr .= substr ( $str, $i, 3 ); // 每次取出三位字符赋给变量$tmpstr,即等
于一个汉字
 $i=$i+3; // 变量自加3
 } else{
 $tmpstr .= substr ( $str, $i, 1 ); // 如果不是汉字,则每次取出一位字符赋给
变量$tmpstr
 $i++;
 }
 }
 return $tmpstr; // 返回字符串
 }
Copy after login

I hope this article will help everyone deal with the same problem with PHP programming!

For more php related articles on solving the problem of garbled Chinese characters intercepted by substr(), please pay attention to the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template