substr截取出现中文乱码怎么办
程序员文章站
2022-03-06 16:33:21
...
方法一:<?php header("Content-Type: text/html; charset=utf-8");$str="107sadf网站工作室欢迎您!"; echo strlen($str)."<br>"; echo substr($str,0,12)."<br>"; echo mb_strlen($str,"UTF8")."<br>"; echo mb_substr($str,0,12,"UTF8")."<br>"; ?>
显示结果如下
34 107sadf网� 16 107sadf网站工作室
strlen()函数返回字符串所占的字节长度,一个英文字母、数字、各种符号均占一个字节,它们的长度均为1。一个中文字符占两个字节,所以一个中文字符的长度是2,对于一个UTF-8的中文字符,会把它当做长度为3来处理。
怎么准确的计算字符串的长度呢?这里,得引入另外一个函数mb_strlen()。mb_strlen()函数的用法与strlen()几乎一摸一样,只是多了一个指定字符集编码的参数。函数原型为:
mb_substr也同样的原理注:mb_strlen与mb_substr并不是PHP的核心函数,使用前需要打开php.ini中的extension=php_mbstring.dll这一项 方法二: <?php header("Content-Type: text/html; charset=utf-8"); $str="107sadf网站工作室欢迎您!"; function chinesesubstr($str,$start,$len){ $strlen = $len - $start; //定义需要截取字符的长度 for($i=0;$i<$strlen;$i++){ //使用循环语句,单字截取,并用$tmpstr.=$substr(?,?,?)加起来 if(ord(substr($str,$i,1))>0xa0){ //ord()函数取得substr()的第一个字符的ASCII码,如果大于0xa0的话则是中文字符 $tmpstr.=substr($str,$i,3); //设置tmpstr递加,substr($str,$i,3)的3是指三个字符当一个字符截取(因为utf8编码的三个字符算一个汉字) $i+=2; } else{ //其他情况(英文)按单字符截取 $tmpstr.=substr($str,$i,1); } } return $tmpstr;} echo chinesesubstr($str,0,12)."<br>"; ?>
最后结果显示为:
107sadf网站
以上就是substr截取出现中文乱码怎么办的详细内容,更多请关注其它相关文章!
上一篇: PHP脚本的最大执行时间问题
下一篇: PHP的cURL库实现网页抓取例子介绍
推荐阅读
-
解析使用substr截取UTF-8中文字符串出现乱码的问题_PHP
-
mysql数据库使用SQLyog 导入中文 csv 文件出现乱码 解决
-
php使用json_encode后出现中文乱码的解决方法
-
Mysql刷库脚本中带中文,读取出现乱码的问题_MySQL
-
php中中文截取函数mb_substr()详细
-
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]_PHP
-
PHP utf-8中文截取无乱码(字符串判断版本)
-
php smarty截取中文字符乱码问题?gb2312/utf-8_php模板_脚本之家
-
php读取mysql中文数据出现乱码的解决方法_PHP教程
-
PHP substr截取字符串时,中文出现乱码的问题解决