strlen()函数和mb_strlen()函数
在PHP中,函数strlen()返回字符串的长度.函数原型如下:
复制代码
代码如下:
int
strlen(string
string_input);
参数string_input为要处理的字符串.
php
echo
strlen("");
strlen("三知开发网");
"echo
mb_strlen(string
string_input,
string
encode);
所以呢,下面的代码能准确计算出中文字符串的长度:
$str
=
"三知sunchis开发网";
strlen($str)."br";
$strlen
$strlen;
原理分析:
剩下的就是纯数学问题了,在此就不啰嗦了......
①.、要么页面原始汉字和从数据库里取出的汉字全是乱码;
①.、页面原始汉字乱码的解决
解决这个问题就需要使用 UltraEdit 的这个功能.
①1 打开中文 Windows,用 UltraEdit 创建一个文本文件,手工输入一个 PHP 页面文件,文件内容如下.保存为 test1.php 文件,注意保存时"格式"下拉框选择"默认"- 特别注意这里.
现在大部分具有国际化特征的软件核心字符处理都是以Unicode为基础的,在软件运行时根据当时的ocale/Lang /Codepage设置确定相应的本地字符编码设置,并依此处理本地字符.在处理过程中需要实现Unicode和本地字符集的相互转换,甚或以 Unicode为中间的两个不同本地字符集的相互转换.这种方式在网络环境下被进一步延伸,任何网络两端的字符信息也需要根据字符集的设置转换成可接受的内容.
数据库中的字符集编码问题
定位问题时常用的技巧
定位中文编码问题通常采用最笨的也是最有效的办法―在你认为有嫌疑的程序处理后打印字符串的内码.通过打印字符串的内码,你可以发现什么时候中文字符被转换成Unicode,什么时候Unicode被转回中文内码,什么时候一个中文字成了两个Unicode字符,什么时候中文字符串被转成了一串问号,什么时候中文字符串的高位被截掉了......
取用合适的样本字符串也有助于区分问题的类型.如:"aa啊aa?@aa"等中英相间,GB、GBK特征字符均有的字符串.一般来说,英文字符无论怎么转换或处理,都不会失真(如果遇到了,可以尝试着增加连续的英文字母长度).
解决各种应用的乱码问题
①.)使用标签设置页面编码
请注意,是属于HTML信息的,仅仅是一个声明,仅表明服务器已经把HTML信息传到了浏览器.
这个函数header()的作用是把括号里面的信息发到http标头.如果括号里面的内容为文中所说那样,那作用和标签基本相同,大家对照第一个看发现字符都差不多的.但是不同的是如果有这段函数,浏览器就会永远采用你所要求的xxx编码,绝对不会不听话,所以呢这个函数是很有用的.为什么会这样呢?那就得说说http标头和HTML信息的差别了:
http标头是服务器以http协议传送HTML信息到浏览器前所送出的字串.而标签是属于 HTML信息的,所以header()发送的内容先到达浏览器,通俗点就是header()的优先级高于(不知道可不可以这样讲).假如一个php页面既有header("content-type:text/html;charset=xxx"),又有,浏览器就只认前者http标头而不认meta了.当然这个函数只能在php页面内使用.
同样也留有一个问题,为什么前者就绝对起作用,而后者有时候就不行呢?这就是此时此刻呢要谈的Apache的原因了.
Apache根目录的conf文件夹里,有整个Apache的配置文档httpd.conf.
如果网页里有header("content-type:text/html;charset=xxx"),就把默认的字符集改为你设置的字符集,所以这个函数永远有用.如果把AddDefaultCharsetxxx前面加个"#",注释掉这句,而且页面里不含header("content- type..."),那这个时候就轮到meta标签起作用了.
下面列出以上的优先顺序:
..header("content-type:text/html;charset=xxx")
..AddDefaultCharsetxxx
..
如果你是web程序员,建议给你的每个页面都加个header("content-type:text/html;charset=xxx"),这样就可以保证它在任何服务器都能正确显示,可移植性也比较强.
结束语 参考:
其实php开发中的中文编码并没有想像的那么复杂,虽然定位和解决问题没有定规,各种运行环境也各不尽然,但后面的原理是一样的.了解字符集的知识是解决字符问题的基础.不过,随着中文字符集的变化,不仅仅是php编程,中文信息处理中的问题还是会存在一段时间的.
PHP对中文字符串的处理一直困扰于刚刚接触PHP开发的新手程序员.下面简要的剖析一下PHP对中文字符串长度的处理:
PHP自带的函数如strlen()、mb_strlen()都是通过计算字符串所占字节数来统计字符串长度的,一个英文字符占1字节.例:
$enStr = 'Hello,China!';
$zhStr = '您好,中国!';
$str = 'Hello,中国!';
// 计算中文字符串长度
// 将字符串分解为单元
preg_match_all("/./us", $string, $match);
// 返回单元个数
return count($match[0]);
}