Home  >  Article  >  Backend Development  >  How to achieve string flipping without garbled characters in php

How to achieve string flipping without garbled characters in php

藏色散人
藏色散人Original
2021-10-28 09:26:091287browse

php method to achieve string flipping without garbled characters: 1. Create a PHP sample file and set the encoding to utf8; 2. Use the mb_strlen function to obtain the length of the utf8 string; 3. Split the string into the array; 4. Reverse the size of the array key names; 5. Recombine the single character elements in the array into a string.

How to achieve string flipping without garbled characters in php

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

How to achieve string flipping without garbled characters in php ?

How to reverse Chinese strings in PHP to avoid garbled characters:

When the blogger was looking at PHP interview questions online today, he saw this A question, how to reverse a string, I thought there is a built-in function strrev that can achieve this function? I tried it later and found that this function can only reverse English characters, and will cause garbled characters in Chinese characters. The main reason is still a coding problem.

In PHP, utf-8 encoded Chinese is calculated as 3 bytes, and gb2312 is calculated as 2 bytes. Therefore, if you want to implement some functions of Chinese strings, you must first solve the encoding problem.

Today this function starts from the coding department. Next, let’s talk about the implemented functions. Today we will use these functions:

is_string()//判断参数是否为字符串,这个大家应该都知道
mb_check_encoding()//用来检查给定的字符串是否属于指定的编码
mb_strlen()//用来获取字符串长度
mb_substr()//用来截取字符串中的字符
krsort()//将数组按键名由大到小排序上述

Three functions starting with mb are used above. The functions starting with mb are used to process multi-byte strings. Mainly to be able to specify string encoding.

mb_check_encoding() accepts two parameters. The first parameter should be a string. The second parameter is to enter a character encoding, and then determine whether the string belongs to the encoding and return a bool value. If the first parameter is omitted, The two parameters default to internal encoding and can be viewed through mb_internal_encoding().

mb_strlen() has two parameters, the first is the string content, and the second is the encoding of the string.

mb_substr() has four parameters. The first is the content of the string to be intercepted, the second is the starting position of interception, the third is the length of interception, and the fourth is the encoding of the string. (In this case UTF-8 is selected, no other encoding will give correct results).

The following is the complete code. The brief comments have been marked. In fact, you can understand it as long as you read it once:

<?php
    header("Content-type:text/html;charset=utf-8");
    $s="这是我的技术博客,欢迎多多来访!";
                             
    function str_rev($str){
        //先判断参数是否为字符串,且为UTF8编码
        if(!is_string($str)||!mb_check_encoding($str,"utf-8")){
            die("输入的不是utf8类型的字符串");
        }
                                 
        //用mb_strlen函获取算utf8字符串的长度
        $length=mb_strlen($str,"utf-8");
                                 
        //声明一个数组备用
        $arr=array();
                                 
        //将字符串拆开放入数组
        for($i=0;$i<$length;$i++){
            $arr[$i]=mb_substr($str,$i,1,"utf-8");
        }
                                 
        //将数组按键名大小反转
        krsort($arr);
                                 
        //将数组中单个字符元素重新组合成字符串
        $str=implode("",$arr);
                                 
        //将翻转后的字符串返回
        return $str;
    }
                             
    echo $s."<br>";
    echo str_rev($s);
/*  得到结果:
 *  这是我的技术博客,欢迎多多来访!
 *  !访来多多迎欢,客博术技的我是这
 */
?>

If there are any errors in the text, please point them out so that we can Complete.

Recommended learning: "PHP Video Tutorial"

The above is the detailed content of How to achieve string flipping without garbled characters in php. For more information, please follow other related articles on the PHP Chinese website!

Statement:
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