具体转化代码如下:
$str='\u767e\u79d1id\u4e0d\u6b63\u786e'; echo str_replace('\u',';&#x',$str);
IE8 的开发人员工具挺好用,就是有时候出问题,当我们按F12的时候,任务栏里出现开发人员工具的任务,但是开发人员工具窗体不弹出,也不出现在IE8里,重装IE88后还是存在此问题,很是让人郁闷。
在网络上看到也经常看到有人求助,说 IE8 开发人员工具出不来了,或IE8 开发人员工具不见了,或IE8 开发人员工具无法使用了!很是着急!
现在,告诉大家一个很好的解决办法:
解决办法其实非常简单:
1、在IE8开发工具任务栏图标上的缩略图上点右键-最大化,然后就出来了。
2、Crtl+P可以出来调试模式 //编者注:此热键乃是让工具与IE8窗口结合在一起(也就是固定工具在IE8里的位置),必须先打开工具,否则是IE8打印的热键!
easyphp框架发布了
本次更新的内容有:
1.增加 APP_NAME 常量,为项目目录,修改 CORE 常量为ROOT_PATH
2.增加对多数据库的支持,修改config.inc.php数据库配置数据为二维,具体调用方法见附录。
3.添加初始化文件夹/文件的创建 ,只需在入口文件中定义好APP_NAME ,系统便会自动创建 APP_NAME文件夹,里面包含 controller,view,model三个文件夹和默认的 index_controller.class.php ,index_model.class.php
4.添加创建controller/model的小工具 ,只需在 当前把当前动作改为tools就可以看到其界面了,如 index.php?c=message&a=tools ,在这里可以方便的创建controller 和model了,再也不用我们复制修改了。如果该模板创建的轻拿默认模板不能满足你的需要,可以修改core/data/的模板类文件。
————————————————————————————–
说明 :
a .多数据支持的 config.inc.php 格式应该写成这样
define (‘TABLE_PRE’,'e_’);
$s_db_config = array (
1 => array (‘db_host’=>’localhost’,'db_user’=>’root’,'db_password’=>”,’db_name’=>’easyphp’,'db_charset’=>’UTF8′),
2 => array (‘db_host’=>’localhost’,'db_user’=>’root’,'db_password’=>”,’db_name’=>’test’,'db_charset’=>’UTF8′),
3 => array (‘db_host’=>’localhost’,'db_user’=>’root’,'db_password’=>”,’db_name’=>’baike’,'db_charset’=>’UTF8′),
);
注意:索引必须大于0 ,1表示数据库1的信息,2表示数据库2的信息,依次类推。
在调用时以这样的方式来调用 :
// $temp2 = $this->mod(2)->result_sql (“select * from bf_user limit 3 “);
// var_dump ($temp2);
// $temp3 = $this->mod(1)->result_sql (“inert into ##__test (id,tid,pid) values (1,2,3) “);
// var_dump ($temp3);
目前暂只支持 result_sql ,exec_sql 两种方法。
————————————————–
程序下载请点这里 easyphp 1.1
自带一个留言板的例子,方便大家入门。如发现问题,请及时联系我 .qq 121325501 谢谢。
如果你想下载更旧的版本,请查看 easyphp 框架V1.0发布了
申明:本程序仅供学习研究之用,请勿用于实际项目。
<pre lang=”javascript”>
if (parent != self) {
alert (‘我被iframe包含了,我不干!’);
}
</pre>
前几天,在写一个SQL语句的时候,where后面明明有限制条件,却每次都将表中其它数据也取出来了。测试了半天还是不行。 这到底是什么原因呢? 最后才发现 ,原来有一个字段我用的是varchar ,里面的值 又是 也逗号分隔的,如 1,2,3,4 但 SQL语句中却用的是这样的 receive_id = 1 ,结果就会出现上面的问题,原来是MYSQL 会自动将1,2,3,4自动转换成int 型,这样一转,就转成 1了,所以结果中老有 1,2,3,4 这样的记录。改成 is_read = ’1′ ,一切终于ok 了。
总结: int 型的 可以写成 字符型 ,如is_del = ’1′ (is_del 为tinyint型),但字符型的不能写成 int 型 ,如 is_read = 1 ,(is_read 为varchar ) 结果就错了。
/** * @file jQuery.Json.js * @description 用于支持Json与其它类型互转的扩展方法 * @author knowmore * @date 2011-03-01 * @license share * @version 1.0.20110301 **/ /** * 将json字符串转换为对象的方法。 * * @public * @param json字符串 * @return 返回object,array,string等对象 **/ jQuery.extend({ /** * @see 将json字符串转换为对象 * @param json字符串 * @return 返回object,array,string等对象 */ evalJSON: function(strJson) { return eval("(" + strJson + ")"); } }); /** * 将javascript数据类型转换为json字符串的方法。 * * @public * @param {object} 需转换为json字符串的对象, 一般为Json 【支持object,array,string,function,number,boolean,regexp *】 * @return 返回json字符串 **/ jQuery.extend({ toJSONString: function(object) { var type = typeof object; if ('object' == type) { if (Array == object.constructor) type = 'array'; else if (RegExp == object.constructor) type = 'regexp'; else type = 'object'; } switch (type) { case 'undefined': case 'unknown': return; break; case 'function': case 'boolean': case 'regexp': return object.toString(); break; case 'number': return isFinite(object) ? object.toString() : 'null'; break; case 'string': return '"' + object.replace(/(\\|\")/g, "\\$1").replace(/\n|\r|\t/g, function() { var a = arguments[0]; return (a == '\n') ? '\\n': (a == '\r') ? '\\r': (a == '\t') ? '\\t': "" }) + '"'; break; case 'object': if (object === null) return 'null'; var results = []; for (var property in object) { var value = jQuery.toJSONString(object[property]); if (value !== undefined) results.push(jQuery.toJSONString(property) + ':' + value); } return '{' + results.join(',') + '}'; break; case 'array': var results = []; for (var i = 0; i < object.length; i++) { var value = jQuery.toJSONString(object[i]); if (value !== undefined) results.push(value); } return '[' + results.join(',') + ']'; break; } } });
使用方法如下:
(1)toJSONString
var goods = new Object(); goods.quick = quick; goods.spec = spec_arr; goods.goods_id = goodsId; goods.number = number; $.post('aaaa.php?step=getPro', 'goods=' + jQuery.toJSONString(goods), getResponse, 'JSON');
(2)evalJSON
result=jQuery.evalJSON(result); alert(result.error);
你也可以直接 点出这里下载
jQuery为开发插件提拱了两个方法,分别是:
jQuery.extend(object); 为扩展jQuery类本身.为类添加新的方法。
jQuery.fn.extend(object);给jQuery对象添加方法。
虽然 javascript 没有明确的类的概念,但是用类来理解它,会更方便。
jQuery便是一个封装得非常好的类,比如我们用 语句 $(“#btn1″) 会生成一个 jQuery类的实例。
jQuery.extend(object); 为jQuery类添加添加类方法,可以理解为添加静态方法。如:
$.extend({ add:function(a,b){return a+b;} });
jQuery.fn.extend(object); 对jQuery.prototype进得扩展,就是为jQuery类添加“成员函数”。jQuery类的实例可以使用这个“成员函数”。
比如我们要开发一个插件,做一个特殊的编辑框,当它被点击时,便alert 当前编辑框里的内容。可以如下实现:
$.fn.extend({ alertWhileClick:function(){ $(this).click(function(){ alert($(this).val()); }); } }); $(" input1").alertWhileClick(); //页面上为:<input id="input1" type="text"/>
easyphp 框架简介
fanglor 2011-05-26
1.easyphp 是什么?
easyphp 是一个简单实现了MVC模式、统一入口及常用函数集成的易用的php框架
2.文件结构
————————–
│ admin.php
│ index.php
│
├─admin //后台项目文件夹
│ ├─controller
│ ├─model
│ └─view
├─app //前台项目文件夹
│ │ index.php //默认空白文件
│ │
│ ├─controller
│ ├─model
│ │
│ └─view
│ └─public
├─cache //缓存文件夹
│ ├─data //数据缓存文件夹
│ └─template //模板编译文件夹
│
├─core //模板核心文件夹
│ │ base_controller.class.php //controller层基类,里面集成了实例化的mod和view ,以及框架起动函数
│ │ base_model.class.php //model层基类,继承于mysql类
│ │ base_view.class.php //view层基类,内部实例化了smarty
│ │ config.inc.php //数据库配置文件
│ │ easyphp.php //公共包含文件,内引进了框架启动所必需的文件
│ │ global.func.php //公共函数文件
│ │ image.class.php //图片处理类
│ │ message.html //默认提示信息模板
│ │ mysql.class.php //mysql数据库类
│ │
│ ├─font //字体文件夹
│ │
│ └─smarty //集成smarty模板文件夹
│
├─d3f //第三方扩展文件夹
└─doc //文档文件夹
└─sql //数据库文件夹
3. 常用集成函数
function C ($ctl) //快速创建控制器对象
function D () //快速创建模型对象,支持空模型
function M ($mod) //快速创建模型对象,不支持空模型
function __autoload ($classname) //模型自动加载类
function addslashes_deep($value) //递归转义字符串
function del_cache () //删除缓存文件
function get_child_ids ($sid = 0) //得到子分类id集
function get_sort ($table , $pid = 0 ,$n=-1) //无限分类函数
function get_sort_path ($url ,$sort_id) //得到分类全路径函数(类似面包屑式导航)
function go_to_url ($url=”) //JS实现无提示直接跳转
function msg ($msg ,$url = ”) //JS提示框
function page ($total,$url,$pagesize,$_var=’p',$str=”) //通用分页函数
function rand_str ( $len = 4) //随机生成字符串函数
function read_file ($key ) //读取文件缓存
function rmkdir ($path) //创建多层文件目录函数
function truncate_cn($string, $length = 80, $etc = ‘…’, $code = ‘gbk’)//中文字符串截取
function upload ( $file ,$upload_dir= ‘.’ ,$max_size = 500) //文件上传函数
function url ($c,$a,$args =array ()) //url 构造函数
function vcode ($index=’vcode’) //验证码函数,会用到core/font里的文件
function write_file ($key ,$val ,$lifttime=3600) //写文件缓存函数
function xmd5 ($str) //加强MD5加密函数
include “mod/Message.class.php”;
$message =new MWT_Message();
$temp2 = $message->fields(‘id,title,content’)->where( ‘ name = “123″ or sex like “%body”‘)->order(‘id asc ‘)->limit(’3,5′)->findAll ();
var_dump ($temp2);
exit;
4. MVC
4.1 mod
model层必须继承 base_model类 ,在里面设好 $table (表名 ,##__表示表前缀,在config.inc.php中定义) ,$pk (主键),保存在各项目文件夹中的model内,文件名必须为xxx_model.class.php ,里面的类名为去掉_model.class.php 之后的名字
4.2 view
模板文件保存在各项目文件夹中的view内,文件名无限制,但一般与 controller的类名一致,后缀名为.html 。<% %> 为定义的模板标签定界符 ,变量应写在其中,例如 <%$username%> ,在 controller类的方法中 可以用 形如 $this->username = ‘fanglor’; 或 $this->assign (‘username’,'fanglor’);把变量赋值到模板,最后 用 $this->display (‘index.html’); 方法调用并显示模板内容
4.3 controller
controller层必须继承 base_controller类 ,在里面最上面一行写上 !defined (‘IN_EASY’) && die (‘没有权限 ‘.basename(__file__)); 权限校验
,保存在各项目文件夹中的controller内,文件名必须为xxx_controller.class.php ,里面的类名为去掉_controller.class.php 之后的名字
4.4 mvc的实现
主要是通过地址路由转发的 ,例如: index.php?c=message&a=list 会自动调用 message_controller.class.php 中的 list方法 ,所以controller类中的各个方法一般对应一个地址动作
5,数据库常用 操作 方法 例举
增加:
M(‘message’)->insert ($data ); //添加 $data 为 要插入的数据 ,索引为 映射好的 索引名
删除 :
M(‘message’)->del () // 全部删除
M(‘message’)->where (‘id < 5′)->del (); //删除ID<5的记录
M(‘message’)->delet e (5) ; // 删除 主键为 5的记录,只适用于删除当前主键为该数字的情况下
M(‘message’)->delet e (); //删除所有
修改:
M(‘message’)->update ($data); //全部修改
M(‘message’)->where (” id = 7″ )->update ($data); //修改ID = 7 的记录 为 $data 里的内容,$data为数组,索引为映射后的
查询 :
M(‘message’)->find_by_id ($id); //查一条记录的所有字段 (一维数组) ,结果同下
M(‘message’)->where (” id = ‘$id’” )->find ();
M(‘message’)->fields (‘title,content’)->where (‘id = 7′)->find (); //查询一条记录的某些字段 (一维数组)
M(‘message’)->fields (‘content’) ->findAll() //查表中的所有数据 (二维数组)
M(‘message’)->where (“id > 7″)-> findAll();
M(‘message’)->fields (‘user_1′) ->where (“id > 7″)->order(‘id desc ‘)-> findAll();
M(‘message’)->fields (‘user_1′) ->where (“id > 7″)->order(‘id_1 desc ‘)->limit(10,5)-> findAll(); //用于分页
多表查询 :
M(‘message’)->fields(“a.uid,a.title,a.content,b.username”)->table(“##__message a left join ##__user b on a.uid = b.uid “)->findAll();
其它:
result_sql :执行SQL返回多维数据的方法 (适用于select语句)
$this->message_list = M(‘message’)->resultSql(“SELECT m.*,u.username fro m message m LEFT JOIN userinfo u ON m.user_id = u.user_id WHERE 1 ORDER BY m.mid “);
exec_sql : 直接执行SQL方法 (适用于insert ,update ,delet e )
$this->exec_sql (” delet e fro m ##__message where id = ‘{$id}’”);
count :查询记录条数方法
$total = M(‘message’)->count ();//查出表中共有多少条记录
$total = M(‘message’)->where (” name = ‘fanglor’”)->count ();//查出表中叫fanglor 的共有多少条记录
get_field :获取某个字段的值 ,返回值为字段串
$username = M(‘user’)->fields(‘username’)->where (” id = 5″)->get_field ();//查出id为5的用户的名字
6.快速入门例子
详见 演示代码中的留言本例子
<VirtualHost *:80> ServerAdmin fanglor@163.com DocumentRoot /server/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /server/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> Alias /suizhou "/exports/suizhou" <Directory "/exports/suizhou"> Options Indexes AllowOverride AuthConfig FileInfo Order allow,deny Allow from all </Directory> </VirtualHost>
注意,要将httpd.conf的
User和Group设置为有权限访问Alias指向目录。否则访问会出现403 forbidden
赶集网招中高级php工程师
公司简介:
赶集网是目前国内最大的生活分类信息平台(日均PV超过4000万),不仅在桌面互联网上拥有最多的用户,最大的发帖量以及最高的浏览量,还是移动互联网领域该行业的领军企业(在android, iphone, symbian, kjava, mtk, bada六个平台都有独立的客户端软件)。赶集网目前的技术团队很多来自于Google、百度、腾讯、微软、联想、亿邮、yahoo等公司。
工作内容:
参与赶集网前端页面架构、性能优化以及房产、汽车、物品交易等垂直频道的开发工作,年薪在13万至20万之间
php工程师 职位要求:
至少3年以上LAMP开发经验
精通Php5和mysql,熟练掌握OOP编程,精通Smarty的使用
熟悉Linux操作系统及常用shell命令;
熟悉js、ajax,熟悉jquery者优先;
了解并研究过hadoop, mapreduce, redis等开源项目
对规范化、标准化、团队化软件开发有正确理解和认识,具有良好的代码和技术文档编写习惯。
乐观向上,有良好的敬业精神、学习能力和团队协作能力,勇于迎接挑战,追求卓越。
良好的算法基础,有较强的算法优化能力
本科及以上学历
sql优化时使用mysql索引应注意的问题
1 .索引不会包含有NULL值的列
只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。
2 . 使用短索引
对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。
3 . 索引列排序
MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
4 . like语句操作
一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。
5 . 不要在列上进行函数运算
select * from users where YEAR(adddate)<2007;
将在每个行上进行函数运算,这将导致索引失效而进行全表扫描,因此我们可以改成
select * from users where adddate<‘2007-01-01’;
6 . 不使用NOT IN和<>、!=操作
