How to intercept the first Chinese garbled code in php

藏色散人
Release: 2023-03-14 09:36:01
Original
1455 people have browsed it

Solution for php to intercept the first Chinese garbled code: 1. Create a PHP sample file; 2. Set "charset=utf-8" encoding; 3. Pass "function str($str='',$ len=0){...}" method can be used to intercept it.

How to intercept the first Chinese garbled code in php

The operating environment of this article: Windows 7 system, PHP version 7.4, DELL G3 computer

How to intercept the first Chinese garbled code in php?

php solves the problem of intercepting garbled Chinese characters

Regarding the problem of Chinese garbled characters intercepting strings, there are many introductions and functions on the Internet, but the author looked at the Internet The function always feels a bit awkward,

So I wrote a function to prevent Chinese garbled characters from appearing when intercepting strings.

The implementation principle is relatively simple. It mainly uses the inconsistent binary ranges of ASCII encoding and Chinese encoding to distinguish them, and then implements it through the substr() function to intercept strings.

The code I wrote is given below. Note: I only focus on utf-8 encoding. For other encodings, the reader can manually change the function to support other encodings.

<?php
header(&#39;content-type:text/html;charset=utf-8;&#39;);
$str = &#39;利要a-符e:r ttnx节小-子s区。vh;peh。例t来个oe体字n代gb节看t通c eu是的soS至什tna过码 t;Ie看C实e/,字le A来具8y么a)n=于ndg是r于 0tmt现码 e0ssf8单下s(uo别e的以ieh过aatx和t接要u几这看 nsw Ihrr用字 mgtts上就eg cAei的nwo码e跳h,t编&#39;;
/*
*在某篇文章中截取一段字符串,多余的用省略号...表示,并且防止中文乱码
*$param1 string要截取的字符串 $str  注意:这里是utf-8编码
*$param2 int截取字符串的长度 $len  
*返回值 成功返回所要截取的字符串,失败为空
*/
function str($str=&#39;&#39;,$len=0){
    //检查参数
    if(!is_string($str) || !is_int($len)){
        return &#39;&#39;;
    }
    $length = strlen($str);
    if($length <= 0 ){
        return &#39;&#39;;
    }
    if($len>=$length){
        return $str;
    }
    //初始化,统计字符串的个数,
    $count = 0;
    for($i=0;$i<$length;$i++){
        //达到个数跳出循环,$i即为要截取的长度
        if($count == $len){
            break;
        }
        $count++;
        //ord函数是获取字符串的ASCII编码,大于等于十六进制0x80的字符串即为中文字符串
        if(ord($str{$i}) >= 0x80){
            $i +=2;//中文编码的字符串的长度再加2
        }
    }
    //如果要截取的个数超过了字符串的总个数,那么我们返回全部字符串,不带省略号
    if($len > $count){
        return $str;
    }else{
        return substr($str,0,$i).&#39;...&#39;;
    }
}
Copy after login

The implementation of the above code is to use the ASCII code of single-byte characters less than 0x80. As for how many bytes to skip, it depends on the specific encoding.

If there are any mistakes, please point them out.

Recommended learning: "PHP Video Tutorial"

The above is the detailed content of How to intercept the first Chinese garbled code in php. For more information, please follow other related articles on 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