为PHP脚本添加utf-8编码支持
方法1:
修改.htacces文件或者httpd.conf,添加一行AddCharset UTF-8 .php
方法2:
使用header函数,添加如下代码:header(”Content-Type: text/html; charset=utf-8″);
方法3:
使用HTML的meta标签:添加如下代码: <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
搜索机器人的PHP代码
/**
* 判断是否为搜索引擎蜘蛛
*
* @access public
* @return string
*/
function is_spider($record = true)
{
static $spider = NULL;
if ($spider !== NULL)
{
return $spider;
}
if (empty($_SERVER['HTTP_USER_AGENT']))
{
$spider = '';
return '';
}
$searchengine_bot = array(
'googlebot',
'mediapartners-google',
'baiduspider+',
'msnbot',
'yodaobot',
'yahoo! slurp;',
'yahoo! slurp china;',
'iaskspider',
'sogou web spider',
'sogou push spider',
'feedfetcher-google',
'yahoofeedseeker'
);
$searchengine_name = array(
'GOOGLE',
'GOOGLE ADSENSE',
'BAIDU',
'MSN',
'YODAO',
'YAHOO',
'Yahoo China',
'IASK',
'SOGOU',
'SOGOU',
'Feedfetcher-Google',
'YahooFeedSeeker'
);
$spider = strtolower($_SERVER['HTTP_USER_AGENT']);
foreach ( $searchengine_bot AS $key => $value)
{
if (strpos($spider, $value) !== false)
{
$spider = $searchengine_name[$key];
if ($record === true)
{
// do something
}
return $spider;
}
}
$spider = '';
return '';
}
UTF8编码规则
utf-8为变长编码, 编码规则如下:
| Binary | Hexadecimal | Decimal | Width |
|---|---|---|---|
| 00000000-01111111 | 00-7F | 0-127 | 1 byte |
| 11000010-11011111 | C2-DF | 194-223 | 2 bytes |
| 11100000-11101111 | E0-EF | 224-239 | 3 bytes |
| 11110000-11110100 | F0-F4 | 240-244 | 4 bytes |
PHP中有以下的函数在操作utf-8字符串时会不安全,具体参考此链接:http://www.phpwact.org/php/i18n/utf-8和http://www.phpwact.org/php/i18n/charsets。
不过所以的问题在PHP6中将都会成为过去,PHP6中会原生的支持utf-8字符集,不过感觉慢了点。觉得.Net和Java早已解决了这类问题,毕竟为了支持多国语言,UTF-8必将成为Web编码的标准。
PHP5.3中新增的常量__DIR__
在PHP中有一个常量__FILE__,它主要用来指向当前执行的PHP脚本。但PHP没有直接提供该脚本所在目录的常量。也就是说如果我们要得到当前PHP脚本所在的目录,需要使用dirname()这个函数:
<?php $dir = dirname(__FILE__); ?>
现在在PHP5.3中会增加了一个新的常量__DIR__,你可以通过此常量来取得当前执行的PHP脚本所在的目录。
例如当前执行的PHP文件为 /htdocs/index.php,则__FILE__等于’/htdocs/index.php’,而__DIR__等于’/htdocs’。
不过最大的缺点还是现在有多少空间服务商支持PHP5.3呢?
设置PHP的Magic Quotes
Magic Quotes在原来设计时可能是为了减轻开发人员的开发工作量,不过最后去反而成为了开发人员的一个噩梦,在不同的PHP环境下,由于Magic Quotes设置的不同,造成了相同的代码却产生了完全不同的结果。明明在开发环境中运行正常,但在最终的运行环境中,内容会莫名其妙的多出一些单引号。最终使得PHP设计师们也不得不在PHP6中把此些设定值取消,把最终的控制权重新还给开发人员。
但现在毕竟还是PHP5的时间,还有很多的服务器依然还在运行着PHP4,等待PHP6的完全商业看来还是有一段时间的。那如何让我们来避免这次噩梦呢?
方法1:
如果你使用的是Dedicated Server,那可以修改系统etc下面的php.ini,不过这种方法使用几率应该不大,使用phpinfo()可以查看修改的效果。
方法2:
修改你的Virtual Host里etc/目录中的php.ini,一些比较成熟的服务商基本上可以这样修改,使用Local Value覆盖系统的Master Value,使用phpinfo()可以查看修改的效果。
方法3:
如果方法2都不行时,可以使用此方法,修改.htaccess,在.htaccess文件中设置php_flag magic_quotes_gpc off,这样也能把magic quotes 关闭。不过文件最好放在最上层的目录中,否则未覆盖到目录,可能设置无效,这种方法必须使用ini_get去查看实际修改结果。
Zend Framework中如何让View和Controller关联
$view = new Zend_View();
$view->setEncoding('utf-8');
$view->doctype('XHTML1_STRICT');
$view->headTitle('title');
$view->headScript()
->appendFile('/scripts/jquery/jquery-min.js')
->appendFile('/scripts/thickbox/thickbox.js');
$view->headStyle()->appendStyle('/styles/main.css')
->appendStyle('/styles/default.css')
->appendStyle('/styles/thickbox.css')
->appendStyle('/styles/ie6.css');
$view->addHelperPath('../application/default/views/helpers');
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
Zend Framework的官方文档说明还是比较详尽的,不过关于如何整合MVC的例子还是少了些。以上的代码实现了Zend Framework中的View和Cotroller的关联。慢慢再介绍在View或者View Helper中如何获取Controller的实例。
Zend Studio for Eclipse 6.01
今天把我的Zend Studio 进行了升级,从原来的6.0版本升级到了6.01版。简单的从UI上看和原来版本没啥区别,想升级主要因为此版本集成了Zend Framework 1.52,这样自己就不用手动集成1.5版。其实那时也挺纳闷的,当6.0版发布时,Zend Framework 1.5也已经发布了,为何那是不一步到位,还得折腾我的硬盘。
具体更新功能如下:
- Updated Zend Framework support including Zend Framework 1.5.2
- Improved Code formatter
- Improved Debugger performance
- New GUI translations for German, French and Italian
- Improved Code folding
- Updated Added PHP extensions for PHP binary on Windows
新增功能6其实也非常诱人,如果Zend Studio中不支持扩展,真的挺难想象PHPUnit还能测试些啥。不过折腾了半天,我的PHPUnit测试还是报“You cannot serialize or unserialize PDO instances”,在命令行运行时完全正常。看来还是继续命令行测试吧。
如有兴趣下载测试,点击这个地址。http://downloads.zend.com/studio-eclipse/6.0.1/ZendStudioForEclipse-6_0_1.exe
如何让自己的网站支持更多格式的图片上传?
对于大多数网站的使用者来说,可能他们并不了解自己所使用的各类浏览器只能显示jpeg、gif和png文件。就算在Windows平台中最常用的bitmap(bmp)格式,以及扫描仪所使用的Tiff格式图片,都是不能被浏览器支持,浏览器并不能直接把以上的格式图片显示在网页中。
当然你也可以要求用户使用各类工具进行图片的转换后,然后再上传。不过相信在这些用户中必然会存在不少不妥协者,当然也必然包含一些菜鸟型用户。相信这种方法应该不是非常好的解决方案。我们当然应该为网友做更多,让他们可以简单的使用我们的网站。
现在就介绍一种非常方便、强大的工具,它不仅可以支持各类图片格式的转换,也能对图片进行相关的缩放。前提可能就是你网站的Web Host是Linux,同时它支持ImageMagick。(应该专业些的Web Host都会安装这个工具)。如果你的Web Host支持SSH,你只需使用SSH登入到系统中,在命令行运行一下convert命令即可。如果系统未给出任何出错信息,而给出了convert命令的相关帮助,那就说明你的系统支持ImageMagick。
以下介绍一下常用的命令:
- 转换图片格式:
convert image.tiff image.png
- 对图片进行缩放:
convert -resize 400×300 src.png dst.png
convert -resize 200×200^ src.png dst.png
更多命令行信息请参考:http://www.imagemagick.org/script/command-line-processing.php
在PHP中只需要简单的使用system()这个函数来调用以上的外部命令即可。同时也可结合GD库来实现图片的Watermark功能。
PHP实现trackback
Trackback是Blog中非常Cool的一个功能,通过它可以了解有多少站点引用了你的文章。如何使用PHP实现这样的功能?其实可以使用Pear库的Services_Trackback即可。
IBM Developerwork有相关介绍文章:使用 PHP 实现引用链接(trackback)
Zend Framework 1.51 manual chm
今天在看Zend Framework 1.51 说明文件的时候,无意中发现所下载的文档包中还包含了制作chm的项目文件。既然这样为何不索性自己做一个chm文件,同时方便自己察看,还可以使用chm的检索功能。
自己对原始文件进行了一定的修正:
- 补上了遗漏的note.png图片。(chm用的是IE引擎,缺图后页面会很难看的)
- 参考framework官方网站说明的字体设定修改了chm中使用的字体。
为了方便其他网友的学习,索性把此chm文件一并上传一份。
有兴趣的可在此地址下载: zend_framework_manual_en.chm