php关于截取中文字符串的问题
发布时间:2025-05-13 21:04:04 发布人:远客网络
一、php关于截取中文字符串的问题
原因:1.php页面语言本身的编码类型不合适,这时候,你直接在脚本中写的中文肯定是乱码,不用说数据库了;
解决方法:选择'utf8'或者'gb2312',这样客户浏览器会自动选择并出现正确的中文显示。注意:'utf8'或者'gb2312'都可以正确显示中文的。
2.数据库mysql中的编码类型不正确。
解决方法:创建数据库的时候,mysql
字符集选择'utf8',mysql
连接校对选择utf8_general_ci,这样创建的数据库用来存储中文肯定没有问题,
否则,你的中文首先在mysql中就是乱码,更不要期望它会给你在php页面中显示正确。
3.与平时的脚本编辑环境有关。比如,有些内容是自己用word写的,有些是用记事本写的,有些用editplus、ultraplus等文本编辑器。有时候就直接在dw中写中文了,
解决方法:尽量用同一种编辑器。如果是拷贝来得既有的内容,建议用ultraplus中的编码转换功能把它转换成utf8或者gb2312。
到底转换成什么类型并不重要,关键要求你的php
web应用程序中的编码要一致就行。
mysql时,建议添加一行代码:mysql_query("set
所以给你一些方法去解决乱码的问题
二、如何利用PHP来截取一段中文字符串而不出现乱码
1、功能:截取全角和半角混合的字符串以避免乱码
2、$length允许字符串显示的最大长度
3、functionsubstr_cut($str_cut,$length=30){
4、 if(strlen($str_cut)>;$length){
5、 if(ord($str_cut[$i])>;128)$i++;
6、$str_cut=substr($str_cut,0,$i)."...";
7、 if(ord($str_cut[$i])>;128)$i++;
8、$str_cut=substr($str_cut,0,$i)."...";
9、如果字符的ASCII码大于128,说明当前字符和下一个字符是属于一个汉字的。
10、则,$i++跳过对下一个字符的判断。
11、再结合循环中的$i++,实际上,当遇到一个汉字时,$i就会加2,从而正确的跳过汉字。
12、最终实现的效果是,$i变量指向的要么是半角的字符,要么是全角汉字的首字符,不会指向
13、全角汉字的第二个字符,所以,当$i>;=$length时,循环结束,使用
14、$str_cut=substr($str_cut,0,$i)."...";截取字符时自然也就不会出现乱码了。
15、本人在写一个程序时需要利用PHP从一段字符串中截取指定长度的一段字符下来。以前在写ASP的时候,参考动网的程序写过类似的程序,不过,还没用PHP写过。
16、想偷懒,看有不有现成的代码可以用。于是,在GOOGLE中输入:PHP截断字符后查找到一段代码。
三、php如何分割中文字符串
1、php分割中文字符串,如果直接用PHP函数“str_split”来分割,会出现乱码,因为中文字符长度和英文字符长度是不一样的。
2、所以,可以建立新的函数先把字符转成ASCII值,接着通过判断不同字符的长度来正确分割中文字符串,把结果存入数组,最后再用PHP函数“join”在字符间插入百分号。
3、if($value>=192&&$value<=223)$split=2;
4、elseif($value>=224&&$value<=239)$split=3;
5、elseif($value>=240&&$value<=247)$split=4;
6、for($j=0;$j<$split;$j++,$i++){
7、$string="百度知道www.baidu.cn";
8、$arr1=str_split_utf8($string);