当前位置:  编程技术>php
本页文章导读:
    ▪php将对象转换为数组的函数(递归方法)      本文中介绍的方法主要是应用于迭代对象。 我主要应用在了simplexml中的simplexml_load_string()上,因为返回的全是对象,如果提取数据比较麻烦,所以应用了下面的函数。 返回的是一个层次比较.........
    ▪php模板函数的正则实现代码      学习了下php的template函数,主要是利用正则表达式,把模板文件(html文件)转换成php文件,从而实现前后台分离,即所谓的mvc。 有兴趣的朋友,可以参考学习下,有问题请进本站QQ群:161228069,.........
    ▪php的mssql扩展SQL查询中文字段名的解决方法      症状:由于sql server中表的字段名是中文,写好的查询语句在sql server查询分析器中测试没有问题,而用php的mssql扩展查询报错。 一、问题: 数据库是MS SQLServer2000,要把SQLServer2000里的一张表的.........

[1]php将对象转换为数组的函数(递归方法)
    来源: 互联网  发布时间: 2013-12-24

本文中介绍的方法主要是应用于迭代对象。
我主要应用在了simplexml中的simplexml_load_string()上,因为返回的全是对象,如果提取数据比较麻烦,所以应用了下面的函数。
返回的是一个层次比较分明的数组对象。
 

代码如下:
<?php
function object_to_array($obj)
{
$_arr = is_object($obj) ? get_object_vars($obj) : $obj;
foreach ($_arr as $key => $val)
{
$val = (is_array($val) || is_object($val)) ? object_to_array($val) : $val;
$arr[$key] = $val;
}
return $arr;
}
?>

    
[2]php模板函数的正则实现代码
    来源: 互联网  发布时间: 2013-12-24

学习了下php的template函数,主要是利用正则表达式,把模板文件(html文件)转换成php文件,从而实现前后台分离,即所谓的mvc。
有兴趣的朋友,可以参考学习下,有问题请进本站QQ群:161228069,交流心得。

一、首先要想好模板文件放在哪?转换后的php文件放哪?还有怎么命名?直接上源码:
 

代码如下:

<?php
function template($tpl = 'index',$dir = 'hello')
{
if(!file_exists($pd = TPL_PATH.$dir.'/'))@mkdir($pd,0777) or die("$pd目录创建失败");//如cache/tpl/hello/
if(!file_exists($td = TPL.$dir.'/'))@mkdir($td,0777) or die("$td目录创建失败");//如data/tpl/hello/

$t2p = $pd.$tpl.'.php';//模板文件正则转换后形成的php文件,如cache/tpl/hello/index.php
$t2h = $td.$tpl.'.html';//html模板文件,如data/tpl/hello/index.html
?>

2.什么时候需要正则转换?可以是正则后的php文件不存在,或正则前的html文件发生改变时。这里使用到了filemtime(string $path)函数,其返回文件最近修改时间。
 

代码如下:
<?php
if(!file_exists($t2p) || @filemtime($t2p) < @filemtime($t2h) )//模板文件改变后,正则的php文件相应更新
{
template_go($t2p,$t2h);//模板转换开始
}
return $t2p;//返回正则后的php文件,可以这样调用:如include template('header','hello');
}
?>

3.开始模板转换,先从html文件中读出,然后正则替换,最后写入php文件中。
 

代码如下:
<?php
function template_go($t2p,$t2h)
{
$str = @file_get_contents($t2h);//读出
if($str === false) exit("模板文件缺失,请检查!");
$str = template_do($str);//正则替换
@chmod($t2p,0777);
return $str = file_put_contents($t2p, $str);//写入
}
?>

4.正则规则,几条比较简略的正则替换语法。
 

代码如下:
<?php
function template_do($str)
{
$str = preg_replace('/([\n\r+])\t+/s', '\\1', $str);//去掉TAB制表符。修正符/s是不忽略换行
$str = preg_replace('/\{\$(.*)\}/Us', '<?php echo $\\1; ?>', $str);/*{$xx}换成<?php echo $xx;?> 注意,必须加上修正符/U,只能匹配一次。也可懒惰匹配*/
$str = preg_replace('/\{php (.+)\}/', '<?php \\1 ?>', $str);/*{php xxxx}换成<?php xxxx ?> 注意,不能加上修正符/s,要考虑多次进行该正则而换行的问题*/
$str = preg_replace('/\{template(.*)\}/Us', '<?php include template\\1; ?>', $str);
/*{template(xx,yy)}换成<?php include template(xx,yy); ?> */
$str = preg_replace('/\{include (.*)\}/Us', '<?php include "\\1"; ?>', $str);/*{include xx.php}换成<?php include xx.php ?> */
$str = "<?php defined('IN_PH') or die('Access Denied');?>".$str;
//$str = preg_replace('/\s+/', ' ', $str);//查看网页源代码看看
return $str;
}
?>
 

当然,这个函数比较简单,期待能完善它。


    
[3]php的mssql扩展SQL查询中文字段名的解决方法
    来源: 互联网  发布时间: 2013-12-24

症状:由于sql server中表的字段名是中文,写好的查询语句在sql server查询分析器中测试没有问题,而用php的mssql扩展查询报错。

一、问题:
数据库是MS SQLServer2000,要把SQLServer2000里的一张表的数据导入MySQL5,其中SQLServer2000表的字段以简体中文命名(强烈建议不要以中文做为字段名)。其实操作就是对SQLServer查询记录,插入到MySQL里。选择的脚本语言是PHP,PHP打开MSSQL和MySQL扩展,对这两个数据库操作都是很容易的问题。

由于sql server中表的字段名是中文,写好的查询语句在sql server查询分析器中测试没有问题,而用php的mssql扩展查询报错。

很多网友都认为是PHP的MSSQL扩展不支持SQL语句中有中文。
资料显示,PHP的MSSQL是支持SQL中有中文的语句。
出现报错问题大多是因为编码的问题,编码数据库和编码与查询语句编码不统一,查询语句到SQLServer里中文部分就成了乱码,造成查询失败。

二、解决方法:
编码不统一的问题。解决分以下几步:
1、确认SQLServer 数据库的编码,我的数据编码是GBK。
2、确认当前PHP脚本文件的编码,我的编码是UTF-8。
3、转换SQL查询语句的的编码。
补充:有的网友提到要把PHP的脚本文件编码转成和数据库编码一致,其实这一步大可不必,只要确认你的SQL语句和数据库的编码一致就可以,这里建议不必转换的原因是如果你的PHP脚本文件里包含其它PHP脚本,那也得对所有include或require的脚本文件编码转换,不然PHP脚本编码不统一很容易出错,若互相关联的文件很多,这也是一件很麻烦的问题而且把事情复杂化了。

三、方案:
写一个转换函数,在把SQL操作前把SQL语句编码转换。下面贴出我的范例代码:
 

代码如下:
<?php
//编码转换函数
function utf8togb($s) {
return iconv('utf-8', 'gbk//IGNORE', $s); // IGNORE 参数是遇到不成转换的字符时忽略
}
//建议把所有中文字段用英文别名替换,方便下面操作还有编码转换等问题
$sql="SELECT [id], [栏目] as typeid, [正题] as title, [作者] as author, convert(text, [正文]) as body FROM [文章表];";
$sql = utf8togb($sql);
?>

    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
NOSQL iis7站长之家
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3