利用以上汉字与英文的差异,我们就可以利用mb_strlen函数与strlen函数分别计算出两组长度数字,然后根据规律进行运算即可判断出字符串的类型了
先讲一下strlen与mb_strlen是求字符串长度的函数
代码如下 | 复制代码 |
<?php //测试时文件的编码方式要是UTF8 $str='中文a字1符'; echo strlen($str).'<br>';//14 echo mb_strlen($str,'utf8').'<br>';//6 echo mb_strlen($str,'gbk').'<br>';//8 echo mb_strlen($str,'gb2312').'<br>';//10 ?> |
PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得 到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍的差异了(在 UTF-8编码下,一个汉字占3个字节)。
例
代码如下 | 复制代码 |
<?php /** * PHP判断字符串纯汉字 OR 纯英文 OR 汉英混合 */ function utf8_str($str){ $mb = mb_strlen($str,'utf-8'); $st = strlen($str); if($st==$mb) return '纯英文'; if($st%$mb==0 && $st%3==0) return '纯汉字'; return '汉英混合'; } $str = '琼台博客'; echo '字符串:<span style="color:red">'.$str.'</span>,是<span style="color:red">'.utf8_str($str).'</span>'; ?> |
需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题
汉字转换成unicode方法
代码如下 | 复制代码 |
<?php //在代码中隐藏utf8格式的字符串 echo my_utf8_unicode("哈哈ABC"); |
汉字转换成unicode方法二
代码如下 | 复制代码 |
|
函数用法:
代码如下 | 复制代码 |
$word = '一个汉字转换成Unicode四字节编码的PHP函数。'; |
上述将输出如下结果:
一个汉字转换成Un
icode四字节编
码的PHP函数。
这一组函数可以将汉字转成unicode编码,也可以将unicode解码成汉字。
将汉字转成Unicode的函数:
代码如下 | 复制代码 |
function uni_encode ($word) |
对Unicode编码进行解码的函数:
代码如下 | 复制代码 |
function uni_decode ($uncode) |
ob_start ob_get_flush 这些函数是缓存技术的一种,是减轻服务器压力的,直到项目开发用到才知道混淆了和缓存的概念,
这些像ob_start ob_get_flush这些函数都是为了在编程中字符串输出到客户端上去为了延长时间而用到的技术,延迟输出(字符串先发送到缓冲区需要时在输出到浏览器),是一种输出技巧。最常见的应用是静态化技术(可以实现静态缓存):
把要输出代码的先保存到缓存区在用ob_get_contents();取得内容写入文件
php ob_start 与 ob_end_flush() 是 php 的缓冲输出函数。
ob_start([string output_callback])- 打开输出缓冲区,所有的输出信息不在直接发送到浏览器,而是保存在输出缓冲区里面,可选得回调函数用于处理输出结果信息。
ob_end_flush - 结束(发送)输出缓冲区的内容,关闭输出缓冲区。
php 输出东西,会保存在一个 php 维护的内存里,称为 buffer 也行,缓存也行,都是一个意思。然后当这个 buffer 满了,php 会自动往 web server 发送这些数据。
也就是说每次 echo,并不一定会输出东西,而是保存在 buffer 里。
ob_start() 的意思,可以理解为(但是实际上和我下面的说法有区别),这个 buffer 由 ob_ 系列函数来来控制,也就是,PHP 不会维护自己的 buffer,不会自动把buffer 的内容自动发送到 web server,直到你 ob_end() 或者类似的 ob 操作。
ob_函数一般用来捕获当前的输出,跟效率是没什么关系的。至于为什么捕获输出,原因很多,例如我捕捉输出,缓存到一个文件里,下次请求就可以直接读这个 cache 文件的内容作为输出了。
代码如下 | 复制代码 |
ob_start(); 2 内容 3 echo ob_get_contents() ; |
例子
代码如下 | 复制代码 |
<?php //打开缓冲区 ob_start(); ?> php页面的全部输出 <?php //取得php页面输出的全部内容 $content = ob_get_contents(); //创建一个文件,并打开,准备写入 $fp = fopen(“1.html”, “w”); //把php页面的内容全部写1.html fwrite($fp, $content); fclose($fp); ?> |
而缓存是一个很大的概念,一般用来解决大型网站高负载问题,像下面雨中漫步讲的 就是一种缓存技术的实现,当然除了内存缓存还有文件、页面缓存,比如想uchome 中系统配置变量,一般不需要改变的设置生成文件是文件缓存,用到这些数据直接通过读取文件读取而不直接从数据库读取,这些都是为了避免再次查询数据减轻访问压力问题而设置的。
网上关于 PHP 缓存类的资料很多,不过这个类应该是我见过功能满足需求,但又无比简洁的一个。废话不多说,直接看代码吧!
使用说明:
1、实例化
代码如下 | 复制代码 |
$cache = new Cache(); |
2、设置缓存时间和缓存目录
$cache = new Cache(60, '/any_other_path/');第一个参数是缓存秒数,第二个参数是缓存路径,根据需要配置。
默认情况下,缓存时间是 3600 秒,缓存目录是 cache/
3、读取缓存
代码如下 | 复制代码 |
$value = $cache->get('data_key');4、写入缓存 $value = $cache->put('data_key', 'data_value');完整实例: $cache = new Cache(); //从缓存从读取键值 $key 的数据 //如果没有缓存数据 <?php //cache constructor, optional expiring time and cache path //returns the filename for the cache //creates new cache files with the given data, $key== name of the cache, data the info/values to store //returns cache for the given key |
将winntphp.ini-dist改名为php.ini,并找到;Windows Extensions项将
代码如下 | 复制代码 |
;extension=php_ldap.dll 改成 extension=php_ldap.dll |
如果有其它的可以
代码如下 | 复制代码 |
extension_dir = c:php4 |
然后从php5中 把libeay32.dll和ssleay32.dll文件 复制到
代码如下 | 复制代码 |
C:/Windows/System/System32 |
这样就可以使用了php_ldap了,查看是否安装上php_ldap.dll文件,打开phpinfo().就可以查看是否安装成功!
一般情况下您只需将其放入以下目录后“系统找不到php_ldap.dll”或者“没有php_ldap.dll的问题”就可以得到解决:
当然,如果您的操作系统没有安装到C盘,只需将路径中的C换作安装操作系统的盘符即可。如果是一般的应用程序找不到DLL文件,可能只需要将下载到的DLL文件拷贝到您启动的应用程序所在的目录。
发送HTTP请求:
代码如下 | 复制代码 |
$client = new Zend_Http_Client(); $client->setUri($url); $client->setConfig(array('maxredirects' => 1)); $response = $client->request(); if ( $response->isRedirect() ) { echo "设置了转发"; } else { echo "没有设置转发"; } |
在这里如果不设置maxredirects参数,Zend默认的最大跳转数为5。就是在每次请求的时候,如果该地址设置了转发,他会读取转发到的新地址,然后再对这个地址发起请求。循环做这个操作,直至新地址没有设置转发或者循环超过了5次才会返回最后一次的请求数据。
这样的话,如果我只想获取某个域名是否设置了转发,那么就必须设置下maxredirects这个参数了。
•Zend Framework代码:
代码如下 | 复制代码 |
public function request($method = null) if ($method) { // Make sure the adapter is loaded // Send the first request. If redirected, continue. return $response; |