PHP string operation
String is one of the important data types in PHP. In Web development, strings need to be processed and analyzed in many cases, which usually involves a series of operations, such as string formatting, string connection and segmentation, string comparison, search and so on. Therefore, it is very important for users to interact with the text system.
$str = "zhant"; // A string can be used as an array to access each character by subscript echo $str[0]; // z echo $str{2}; // a // Modify string content $str{4} = "g"; echo $str; // zhang // A Chinese character takes up three bytes $title = "Hello"; // strlen returns the length of the string echo strlen($title); // 6 // Then when visiting, we need to splice echo $title{0}.$title{1}.$title{2}; // you
Generate a random four digit verification code
// Generate a string consisting of A-Z and A-Z 0-9 $codes = implode("",range('a','z')).implode("",range('A','Z')).implode("",range(0,9)); $code = ''; for ($i=0; $i < 4; $i++) { // Get random index number $index = mt_rand(0,strlen($codes)-1); $code .= $codes[$index]; } echo "<span style='color:red'>{$code}<span>";
String comparison, segmentation and replacement
strcmp and strcasecmp string comparison functions
strcmp: https://www.php.net/manual/zh/function.strcmp.php
strcasecmp: https://www.php.net/manual/zh/function.strcasecmp.php
// If str1 is less than str2, the string comparison function returns < 0; If str1 is greater than str2, return > 0; If they are equal, return 0. // StrCmp (string $STR1, string $STR2): int is strictly case sensitive echo strcmp('abc','ab'); // 1 echo strcmp('abc','abd'); // -1 echo strcmp('abc','ABC'); // 1 echo strcmp('abc','abc'); // 0 // Compare one by one according to ASCII code // ------------------------------------- // strcasecmp is the same as the above return value, but is case insensitive echo strcasecmp('abc','ABC'); // 0 echo strcasecmp('abc','abc'); // 0
Splitting and merging of strings
The value of implode() array is converted to string. join() is the alias of this function: implode()
Expand string to array: https://www.php.net/manual/zh/function.explode.php
list() assigns the values in the array to a group of variables: https://www.php.net/manual/zh/function.list.php
$study = ['html','css','js','es6','jquery','vue','react']; // The first parameter of the array to string function is the separator, and the second parameter is the array echo implode('---',$study); // html---css---js---es6---jquery---vue---react echo join(',',$study); // html,css,js,es6,jquery,vue,react // Convert expand string to array $str = "html,css,js,es6,jquery,vue,react"; // What is used to split strings print_r(explode(",", $str)); /* Array ( [0] => html [1] => css [2] => js [3] => es6 [4] => jquery [5] => vue [6] => react ) */ // The third parameter specifies to split into several arrays print_r(explode(",", $str,6)); /* Array ( [0] => html [1] => css [2] => js [3] => es6 [4] => jquery [5] => vue,react ) */ // ------------------------- // list() assigns the value of the array to several variables list($localhost,$username,$password,,$port) = explode(":", 'localhost:root:root:utf8:3306'); echo "mysql:host={$localhost};username={$username};password={$password};port={$port}"; /* mysql:host=localhost;username=root;password=root;port=3306 */ // The assignment of associative arrays to variables should be one-to-one in the form of key value pairs $params = ['host'=>'localhost','username'=>'root','password'=>'root']; list('host'=>$host,'username'=>$username,'password'=>$password) = $params; printf("host=%s;username=%s;password=%s",$host,$username,$password); /* host=localhost;username=root;password=root */
String interception
// substr() string interception function echo substr('abcdefg',3,2); // de echo substr('abcdefg',3); // defg echo substr('abcdefg',-3); // efg // The ASCII conversion function chr() ord() is generally used to determine whether the user name starts with a letter, intercept the first character to determine its ASCII size range A 65 a 97 // ASCII comparison table http://c.biancheng.net/c/ascii/ // ucfirst converts initials to uppercase // ord() string to ASCII // chr() ASCII to character $username = 'admin'; echo ord(substr(ucfirst($username),0,1))>=65 && ord(substr(ucfirst($username),0,1))<=90?'The user name is correct':'Please start the user name with a letter'; echo strlen($username)<4||strlen($username)>10?'The length of user name should be 6-10 Characters':'The user name is correct';
String replacement function (sensitive word escape)
str_replace() substring replacement: https://www.php.net/manual/zh/function.str-replace.php
// Replace the directory separator of the window system with the Linux directory separator $path = "D:\phpstudy_pro\Extensions\php\php7.3.9nts\php.exe"; // View path separators supported by the current operating system echo DIRECTORY_SEPARATOR; // Character content to be replaced character content string after replacement echo str_replace('\\','/',$path); /* D:/phpstudy_pro/Extensions/php/php7.3.9nts/php.exe */ // The fourth parameter is the number of times the replacement can be received echo str_replace('transfer accounts','***','Support WeChat large transfer, Alipay transfer, bank card transfer.',$count); // Support for WeChat's large scale * * *, Alipay * * *, bank card * * * echo "\'transfer accounts\'Occurrence times of sensitive words:{$count}"; // The character content of the first parameter to be replaced can be an array $vowels = array("gambling","beauty",'Licensing','Macao'); echo str_replace($vowels, "**", "Welcome to the gambling platform, Macao crown gambling website,Beauty online licensing"); // Welcome to * * platform, * * crown * * website, * * Online** // Both sensitive words and replacement contents can be arrays, which will be replaced with corresponding contents $search = ['make friends','advertisement','transfer accounts','live broadcast','commerce','Chat with','opposite sex']; $flag = ['***','---','&&&','000','*goods*','chat','Same sex']; $news = 'The company undertakes all kinds of advertising agents, provides live broadcast and cargo teaching services, and provides online chat services for heterosexual friends'; echo str_replace($search,$flag,$news); /* The company undertakes various --- agents, provides 000 and * goods * teaching services, and provides same-sex * * * online chat services */
URL link parsing function
parse_str() parses strings into arrays
https://www.php.net/manual/zh/function.parse-str.php
parse_url() parses the URL and returns an array of its components
https://www.php.net/manual/zh/function.parse-url.php
http_build_query generate URL_ Request string after encode
https://www.php.net/manual/zh/function.http-build-query.php
// parse_str() parses strings into arrays $str = "first=value&arr[]=foo+bar&arr[]=baz"; parse_str($str, $output); extract($output); echo $first; // value echo $arr[0]; // foo bar echo $arr[1]; // baz $url = "id=1&name=zhang&gender=1"; parse_str($url,$result); echo "<pre>"; print_r($result); /* Array ( [id] => 1 [name] => zhang [gender] => 1 ) */ // -------------------------------- // parse_url() parses the URL and returns an array of its components $url = 'http://zhang.com:password@hostname/0425/demo.php?id=1&name=zhang#anchor'; echo "<pre>"; print_r(parse_url($url)); /* Array ( [scheme] => http [host] => hostname [user] => zhang.com [pass] => password [path] => /0425/demo.php [query] => id=1&name=zhang [fragment] => anchor ) */ // You can return the required part by setting the second parameter echo parse_url($url,PHP_URL_QUERY); // id=1&name=zhang echo parse_url($url, PHP_URL_PATH); // /0425/demo.php // ------------------------------------------- // http_build_query - request string after generating URL encode $url = "http://zhang.com?name = Zhang Shan & age = 20 & email= zhang@qq.com "; $query = parse_url($url,PHP_URL_QUERY); // name = Zhang Shan & age = 20 & email= zhang@qq.com // Get query through parse_str to array parse_str($query,$params); echo "<pre>"; print_r($params); /* Array ( [name] => Zhang Shan [age] => 20 [email] => zhang@qq.com ) */ // Request parameter to Unicode echo http_build_query($params); // name=%E5%BC%A0%E7%8F%8A&age=20&email=zhang%40qq.com // http_ build_ The query parameter can be not only an array, but also an object echo http_build_query(new class{ public $name = 'admin'; public $email = 'admin@php.cn'; private $gender = 'male'; // Private member }); // name=admin&email=admin%40php.cn
Convert normal picture to bs64 picture
Output a picture in html
<img src='https://c-ssl. duitang. com/uploads/item/202006/20/20200620205947_ kxnPk. thumb. 1000_ 0. JPEG 'ALT =' beauty 'width = "300" >
Disguise PHP script as image image
// Camouflage request header response header('content-type:image/jpg'); // Open file $file = file_get_contents('https://c-ssl.duitang.com/uploads/item/202006/20/20200620205947_kxnPk.thumb.1000_0.jpeg'); echo $file; // Because the response header is set, the current script can only parse the picture. In the html tag, you can link the file path to display the picture content
This allows you to link the script to display images in html via img tags
<img src="http://zhang.com/0430/demo.php" width="300">
base64 encode the picture
base64_encode(): use MIME base64 to encode data
https://www.php.net/manual/zh/function.base64-encode.php
base64_decode(): decode the data encoded by MIME base64
https://www.php.net/manual/zh/function.base64-decode.php
<?php $str = 'This is an encoded string'; echo base64_encode($str); // Encoded string data // VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw== $file = file_get_contents('https://c-ssl.duitang.com/uploads/item/202006/20/20200620205947_kxnPk.thumb.1000_0.jpeg'); $imgbs64 = base64_encode($file); echo $imgbs64; // Output 60 bit hash value ?> // Display bs64 bit pictures through img tag <img src="data:image/jpeg;base64,<?=$imgbs64 ?>" width="300">
In the figure, we can see that the picture links processed by bs64 encoding are super long, and users cannot obtain the real links of the pictures
String hash processing
md5() returns a 32-bit hash value
https://www.php.net/manual/zh/function.md5.php
sha1() returns a 40 bit hash value
https://www.php.net/manual/zh/function.sha1.php
Since the algorithm that the above function depends on is not complex enough, it is not recommended to encrypt plaintext password
password_hash - create hash of password (recommended)
password_verify - verify that the password matches the hash value
// Since md5() and sha1() are organic, we can add salt to them $salt = 'zhangshuai'; echo sha1('root'.$salt); // 43f5582e40049d275977f9ed76c8972723e9b4b5 // -------------------------------------------- // password_hash create hash of password $pwd = password_hash('zhang',PASSWORD_DEFAULT); echo $pwd; // Returns a 60 character string // password_verify - verify that the password matches the hash value echo password_verify('zhang',$pwd)?'The password is correct':'Password error'; // ------------------------------------------ // md5_file() hashes the file // Generate md5 to store in file $file_md5 = md5_file('demo.php'); file_put_contents('md5file.txt',$file_md5); // Verify in another PHP file when demo When PHP is modified, it cannot match md5 stored in the file if(md5_file('demo.php') === file_get_contents('md5file.txt')){ echo "The file is secure and has not been tampered with maliciously"; }else{ echo "Warning! The file has been tampered with"; }
More string related functions
- String lookup
stripos() is used to find the first occurrence of a part of a string (case insensitive)
strripos() is used to calculate the position of the last occurrence of the specified string in the target string (case insensitive)
strpos() is used to find the first occurrence of a string
strrpos() is used to find the position of the last occurrence in the string
var_export(stripos('xyz', 'c'));; // If not found, false will be returned echo stripos('ABCabc', 'c'); // Return to first occurrence position 2 echo strripos('ABCabcd', 'c'); // Last occurrence position 5 echo strpos('ABCabc','c'); // 5 case sensitive echo strpos('ABCabc','C'); // 2 echo strrpos('ABCcabcAb','c'); // 6
- Case conversion of strtoupper and strtower strings
- str_ireplace() and str_replace() string replacement
- substr() and mb_substr(): intercept string
- trim(): remove spaces on both sides of the string
- Strlen () and mb_strlen(): get string length
- addslashes() and stripsplashes(): String escape and restore
- str_repeat(): repeat a string
- str_shuffle(): randomly shuffle strings
Answers to PHP test questions
1-5: C ABD D C A
6-10: AD D B C A
11-15: A B ACD D A
16-20: B A D A B
21-23: C B C
Job content: complete a user registration page and verify the form fields with the string function library summarized in xmind file? For example, limit the length of the password, the two passwords must be consistent, the verification code must be verified, and the first letter of the user name must be a letter, etc?
<!-- User registration page register.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>User registration page</title> <link rel="stylesheet" type="text/css" href="css/regist.css"> </head> <body> <div class="wrapper"> <article> <h1><span>Personal blog registration</span></h1> <div class="main"> <form action="" method="post"οnsubmit="return false"> <div class="tel"> <input type="email" name="email" placeholder="Please enter the mailbox" id="telephone" required > </div> <div class="userName"> <input type="text" name="userName" placeholder="enter one user name" id="username" required> </div> <div class="password"> <input type="password" name="pwd" placeholder="Please input a password" id="pwd" required> </div> <div class="againpwd"> <input type="password" name="cpwd" placeholder="Please enter the password again" id="cmpwd" required> </div> <div class="captcha"> <input type="text" name="captcha" id="captcha" placeholder="Please enter the verification code" required> <img width="60" height="37" onclick="this.src='gd_captcha.php?'+new Date().getTime();" style="margin: 10px auto;vertical-align: bottom;" src="gd_captcha.php"> <em id="captchainfo">Prompt message</em> </div> <button>register</button> </form> </div> </article> </div> <script type="text/javascript" src="js/reg.js"></script> </body> </html>
/* Login page style register css */ *{ margin: 0;padding: 0;font-family: Microsoft YaHei;} em{display: block;font-style: normal;font-size: 14px;color:red} li{list-style: none;display: inline-block;} li a{text-decoration: none;} html,body,.wrapper{ width: 100%; height: 100%; overflow: hidden; } .wrapper{ background: url(http://zhsh520.com/hero-bg.jpg); background-size: 100% 100%; position: relative; } article{ width: 1200px; margin: 0 auto; } article{ width: 400px; margin: 100px auto 0px auto; } article h1{width: 400px;color: #fff;text-align: center;margin-bottom: 15px;font-weight: normal;} article h1 em{display: inline-block;color:#5593ce;font-size: 25px;} .main{ padding: 40px 0px; width: 100%; background-color: rgba(0, 0, 0, 0.6); } form{ width: 297px; margin: 0 auto; } .main form input{ margin: 10px 0; width: 280px; height: 35px; border-radius: 3px; display: inline-block; border: 1px solid rgb(165, 161, 161); padding-left: 10px; } .main form input[name="captcha"]{ width: 200px; } form button{width: 290px;height: 35px;background-color: red;color: #fff;border:none;margin-top: 15px;letter-spacing: 10px;font-size: 16px;text-align: center;} footer{ width: 100%; position: absolute; left: 0; bottom: 50px; font-size: 14px; color: #5593ce; } footer ul{width: 570px;height: 35px;} footer p{width: 100%;text-align: center;} footer ul li{display: inline-block;width: 90px;height: 13px;line-height: 13px;border-right: 1px solid #5593ce;text-align: center; } footer ul li a{font-size: 14px;color:#5593ce; } footer ul,footer p{margin: 0 auto;}
// Submit information validation reg js document.querySelector('button').addEventListener("click",function(e){ const formdata = new FormData(document.querySelector('form')); const xhr = new XMLHttpRequest(); xhr.open("post", "regist_check.php"); xhr.onload = () => { let json = JSON.parse(xhr.response); if(json.status==0){ document.querySelector("#captchainfo").textContent = json.msg; document.querySelector("#captchainfo").style.color = "red"; }else{ document.querySelector("#captchainfo").textContent = json.msg; document.querySelector("#captchainfo").style.color = "green"; setTimeout(()=>{ window.location.href = "http://baidu.com"; },2000) } }; xhr.send(formdata); }); document.querySelector('#captcha').addEventListener('blur',function(e){ // console.log(e.target.value); const xhr = new XMLHttpRequest(); xhr.open("post", "captcha_check.php"); xhr.onload = () => { let json = JSON.parse(xhr.response); if(json.status==0){ document.querySelector("#captchainfo").textContent = json.msg; document.querySelector("#captchainfo").style.color = "red"; e.target.focus(); }else{ document.querySelector("#captchainfo").textContent = json.msg; document.querySelector("#captchainfo").style.color = "green" } }; xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); xhr.send("captcha="+e.target.value); })
// User information verification register_ check. php <?php session_start(); $user = $_POST; if(strlen($user['userName'])<4 || !preg_match("/^[A-Za-z]/i",$user['userName']) ){ echo json_encode(['status'=>0,'msg'=>'The user name must be no less than four digits long and start with a letter']); }else if(strcmp($user['pwd'],$user['cpwd'])!== 0){ echo json_encode(['status'=>0,'msg'=>'The two passwords are inconsistent']); }else if(strcasecmp($_SESSION["captcha"],$user["captcha"])!== 0){ echo json_encode(['status'=>0,'msg'=>'Incorrect verification code']); }else{ echo json_encode(['status'=>1,'msg'=>'Registration succeeded, please wait']); } ?>
// Captcha of verification code_ check. php <?php /** * Accept the verification code submitted by the user when logging in */ session_start(); //1. Obtain the verification code submitted by the user $captcha = $_POST["captcha"]; //2. Check the verification code in the session with the verification code submitted by the user. When successful, prompt that the verification code is correct, and destroy the previous session value. If unsuccessful, resubmit if(!empty($captcha) && strtolower($_SESSION["captcha"]) === strtolower($captcha)){ echo json_encode(['status'=>1,'msg'=>'The verification code is correct']); }else{ echo json_encode(['status'=>0,'msg'=>'Incorrect verification code']); }
// Verification code generation gd_captcha.php <?php session_start(); $image = imagecreatetruecolor(100, 30); $bgcolor = imagecolorallocate($image, 255, 255, 255); imagefill($image, 0, 0, $bgcolor); $content = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; $captcha = ""; for ($i = 0; $i < 4; $i++) { // font size $fontsize = 10; // Font color $fontcolor = imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120)); // Set font content $fontcontent = substr($content, mt_rand(0, strlen($content)), 1); $captcha .= $fontcontent; // Displayed coordinates $x = ($i * 100 / 4) + mt_rand(5, 10); $y = mt_rand(5, 10); // Fill content into canvas imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor); } $_SESSION["captcha"] = $captcha; //4.3 setting background interference elements for ($$i = 0; $i < 200; $i++) { $pointcolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200)); imagesetpixel($image, mt_rand(1, 99), mt_rand(1, 29), $pointcolor); } //4.4 setting interference line for ($i = 0; $i < 3; $i++) { $linecolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200)); imageline($image, mt_rand(1, 99), mt_rand(1, 29), mt_rand(1, 99), mt_rand(1, 29), $linecolor); } //5. Output picture header information to the browser header('content-type:image/png'); //6. Output pictures to browser imagepng($image);
Browse address: http://easys.ltd/regist/regist.html
Display effect: