月度归档:2012年04月

把网页中的链接地址用 encode编码

IE下面的链接有中文参数的话会是乱码,不管是IE6还是IE9。本来想在PHP里面输出的时候处理的,不过PHP处理这个的话加大了服务器的负载,想办法用JS来做。JS有这样的函数。使用还是

$(document).ready(function(e) {

$(“a”).each(function(index, element) {   //这里是把所有的a标签里面的链接都用encodeURI函数 编码一次。如果用不到这么多,可以把需要加的放在一个类里面

$(this).attr(“href”,encodeURI($(this).attr(“href”)));

});

});

下面来分析一下JS里面自带的一些编码函数,以下内容都来自百度

escape 方法

对 String 对象编码以便它们能在所有计算机上可读,

escape(charString) 必选项 charstring 参数是要编码的任意 String 对象或文字。

说明 escape 方法返回一个包含了 charstring 内容的字符串值( Unicode 格式)。所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替,其中 xx 等于表示该字符的十六进制数。例如,空格返回的是 “%20” 。

字符值大于 255 的以 %uxxxx 格式存储。

注意   escape 方法不能够用来对统一资源标示码 (URI) 进行编码。对其编码应使用 encodeURI 和encodeURIComponent 方法。

 

 

encodeURI 方法

将文本字符串编码为一个有效的统一资源标识符 (URI)。

encodeURI(URIString) 必选的 URIString 参数代表一个已编码的 URI。

说明 encodeURI 方法返回一个编码的 URI。如果您将编码结果传递给 decodeURI,那么将返回初始的字符串。encodeURI 方法不会对下列字符进行编码:”:”、”/”、”;” 和 “?”。请使用 encodeURIComponent 方法对这些字符进行编码。

 

encodeURIComponent 方法

将文本字符串编码为一个统一资源标识符 (URI) 的一个有效组件。

encodeURIComponent(encodedURIString) 必选的 encodedURIString 参数代表一个已编码的 URI 组件。

说明

encodeURIComponent 方法返回一个已编码的 URI。如果您将编码结果传递给 decodeURIComponent,那么将返回初始的字符串。因为 encodeURIComponent 方法对所有的字符编码,请注意,如果该字符串代表一个路径,例如 /folder1/folder2/default.html,其中的斜杠也将被编码。这样一来,当该编码结果被作为请求发送到 web 服务器时将是无效的。如果字符串中包含不止一个 URI 组件,请使用 encodeURI 方法进行编码。

Debian Linux下,locale语言环境设置

这几天公司准备新添服务器,操作系统沿用以前的系统 Debian Linux。安装系统的时候为了省事,选择了中文,结果SSH连上去中文就是乱码,还是要改回英文才行。网上搜了大半天终于找到适合  Debian Linux 修改语言环境的方法。。。

原来locale文件在 /etc/default/locale

# vi /etc/default/locale

注释掉下面两行

LANG=”zh_CN.UTF-8″
LANGUAGE=”zh_CN:zh”

 

下面是百度的多种方法

Linux 切换 locale 语言设置的四种方法(总有一种方法可以解决):

1) 从CDE登录屏幕上修改locale
选择 options -> languages -> choose the new locale
2) 临时设置locale(shell相关的)
ksh : LANG=<locale>
sh : LANG=<locale>
export LANG
csh : setenv LANG <locale>
bash: export LANG=en_US(zh.GBK)
3) vi /etc/default/init
add
LANG=<locale>
LC_ALL=<locale>
reboot。
4) .cshrc/.profile/.bashrc: 设置$LANG

debian系统下的mysql数据库服务器重设root用户的密码

因为公司的Discuz论坛准备搬到新的服务器上面。所以在本地尝试搬家,发现Mysql服务器拒绝远程服务,然后就在 phpmyadmin 弄数据库权限,尝试添加一个用户可以发送远程请求。

结果弄完后 准备把新加的用户删了,不小心手划把自己也删了。。。怎么办root密码又不知道,只有想办法找回root密码然后添加之前的用户,然后分配管理权限。

公司的服务器是用的LAMP架构,Linux是用的debian的,下面就说一下在debian Linux的操作

下面具体说下 MySQL重置root密码:

打开机器登录Linux这些废话就不说了。。。直接从输入的命令说起

第一步:停止mysql服务

/etc/init.d/mysql stop

第二步:设置忽略密码启动mysql服务器

在安装目录找到my.ini配置文件,打开配置文件,找到[mysqld]一行,在下面添加skip-grant-tables后保存该文件,重新启mysql动服务。。。安装目录一般情况下在 /etc/mysql/ 目录下。

/etc/init.d/mysql start

第三步:用root用户登录Mysql并重设密码

#mysql -u root

  • mysql> use mysql;
  • mysql> update user set password=PASSWORD(“此处为新设密码“) where User=’root’;
  • mysql> flush privileges;
  • mysql> quit

第四步:把 /etc/mysql/my.ini 下面添加的 skip-grant-tables 注释掉。然后重启Mysql

/etc/init.d/mysql restart

这样就OK了。。。然后用root添加新帐户分配权限

好用的一个JS时间插件-WdatePicker日历控件使用方法

官方网站:http://www.my97.net/

1. 跨无限级框架显示

无论你把日期控件放在哪里,你都不需要担心会被外层的iframe所遮挡进而影响客户体验,因为My97日期控件是可以跨无限级框架显示的

示例2-7 跨无限级框架演示

可无限跨越框架iframe,无论怎么嵌套框架都不必担心了,即使有滚动条也不怕

2. 民国年日历和其他特殊日历

当年份格式设置为yyy格式时,利用年份差量属性yearOffset(默认值1911民国元年),可实现民国年日历和其他特殊日历

示例2-8 民国年演示

<input type=”text” id=”d28″ onClick=”WdatePicker({dateFmt:’yyy/MM/dd’})”/>

注意:年份格式设置成yyy时,真正的日期将会减去一个差量yearOffset(默认值为:1911),如果是民国年使用默认值即可无需另外配置,如果是其他的差量,可以通过参数的形式配置

3. 为编程带来方便

如果el的值是this,可省略,即所有的el:this都可以不写
日期框设置为disabled时,禁止更改日期(不弹出选择框)
如果没有定义onpicked事件,自动触发文本框的onchange事件
如果没有定义oncleared事件,清空时,自动触发onchange事件

4. 其他属性

设置readOnly属性,可指定日期框是否只读
设置highLineWeekDay属性,可指定是否高亮周末
设置isShowOthers属性,可指定是否显示其他月的日期
加上class=”Wdate”就会在选择框右边出现日期图标

多语言和自定义皮肤

1. 多语言支持

通过lang属性,可以为每个日期控件单独配置语言,当然也可以通过WdatePicker.js配置全局的语言
语言列表和语言安装说明详见语言配置

示例3-1 多语言示例

繁体中文:
<input id=”d311″ class=”Wdate” type=”text” onFocus=”WdatePicker({lang:’zh-tw’})”/>

英文:
<input id=”d312″ class=”Wdate” type=”text” onFocus=”WdatePicker({lang:’en’})”/>

简体中文:
<input id=”d313″ class=”Wdate” type=”text” onFocus=”WdatePicker({lang:’zh-cn’})”/>

注意:默认情况lang=’auto’,即根据浏览器的语言自动选择语言.

2. 自定义和动态切换皮肤 立刻转到皮肤中心

通过skin属性,可以为每个日期控件单独配置皮肤,当然也可以通过WdatePicker.js配置全局的皮肤
皮肤列表和皮肤安装说明详见皮肤配置

示例3-2 皮肤演示

默认皮肤default: skin:’default’

<input id=”d321″ class=”Wdate” type=”text” onfocus=”WdatePicker()”/>

注意:在WdatePicker里配置了skin=’default’,所以此处可省略,同理,如果你把WdatePicker里的skin配置成’whyGreen’那么在不指定皮肤的情况下都使用’whyGreen’皮肤了

whyGreen皮肤: skin:’whyGreen’

<input id=”d322″ class=”Wdate” type=”text” onfocus=”WdatePicker({skin:’whyGreen’})”/>

注意:更多皮肤,请到皮肤中心下载

4. 日期范围限制

1. 静态限制
注意:日期格式必须与 realDateFmt 和 realTimeFmt 一致

你可以给通过配置minDate(最小日期),maxDate(最大日期)为静态日期值,来限定日期的范围

示例4-1-1 限制日期的范围是 2006-09-102008-12-20

<input id=”d411″ class=”Wdate” type=”text” onfocus=”WdatePicker({skin:’whyGreen’,minDate:’2006-09-10′,maxDate:’2008-12-20′})”/>

示例4-1-2 限制日期的范围是 2008-3-8 11:30:00 到 2008-3-10 20:59:30

<input type=”text” class=”Wdate” id=”d412″ onfocus=”WdatePicker({skin:’whyGreen’,dateFmt:’yyyy-MM-dd HH:mm:ss’,minDate:’2008-03-08 11:30:00′,maxDate:’2008-03-10 20:59:30′})” value=”2008-03-09 11:00:00″/>

示例4-1-3 限制日期的范围是 20082月 到 200810

<input type=”text” class=”Wdate” id=”d413″ onfocus=”WdatePicker({dateFmt:’yyyy年M月’,minDate:’2008-2′,maxDate:’2008-10′})”/>

示例4-1-4 限制日期的范围是 8:00:00 到 11:30:00

<input type=”text” class=”Wdate” id=”d414″ onfocus=”WdatePicker({dateFmt:’H:mm:ss’,minDate:’8:00:00′,maxDate:’11:30:00′})”/>

2. 动态限制
注意:日期格式必须与 realDateFmt 和 realTimeFmt 一致

你可以通过系统给出的动态变量,如%y(当前年),%M(当前月)等来限度日期范围,你

还可以通过#{}进行表达式运算,如:#{%d+1}:表示明天

动态变量表

格式

说明

%y

当前年

%M

当前月

%d

当前日

%ld

本月最后一天

%H

当前时

%m

当前分

%s

当前秒

#{}

运算表达式,如:#{%d+1}:表示明天

#F{}

{}之间是函数可写自定义JS代码

示例4-2-1 只能选择今天以前的日期(包括今天)

<input id=”d421″ class=”Wdate” type=”text” onfocus=”WdatePicker({skin:’whyGreen’,maxDate:’%y-%M-%d’})”/>

示例4-2-2 使用了运算表达式 只能选择今天以后的日期(不包括今天)

<input id=”d422″ class=”Wdate” type=”text” onfocus=”WdatePicker({minDate:’%y-%M-#{%d+1}’})”/>

示例4-2-3 只能选择本月的日期1号至本月最后一天

<input id=”d423″ class=”Wdate” type=”text” onfocus=”WdatePicker({minDate:’%y-%M-01′,maxDate:’%y-%M-%ld’})”/>

示例4-2-4 只能选择今天7:00:00至明天21:00:00的日期

<input id=”d424″ class=”Wdate” type=”text” onfocus=”WdatePicker({dateFmt:’yyyy-M-d H:mm:ss’,minDate:’%y-%M-%d 7:00:00′,maxDate:’%y-%M-#{%d+1} 21:00:00′})”/>

示例4-2-5 使用了运算表达式 只能选择 20小时前 至 30小时后 的日

<input id=”d425″ class=”Wdate” type=”text” onClick=”WdatePicker({dateFmt:’yyyy-MM-dd HH:mm’,minDate:’%y-%M-%d #{%H-20}:%m:%s’,maxDate:’%y-%M-%d #{%H+30}:%m:%s’})”/>

1. 脚本自定义限制
注意:日期格式必须与 realDateFmt 和 realTimeFmt 一致

系统提供了$dp.$D和$dp.$DV这两个API来辅助你进行日期运算,此外你还可以通过在 #F{} 中填入你自定义的脚本,做任何你想做的日期限制

示例4-3-1 前面的日期不能大于后面的日期且两个日期都不能大于 2020-10-01

合同有效期从 到
<input id=”d4311″ class=”Wdate” type=”text” onFocus=”WdatePicker({maxDate:’#F{$dp.$D(/’d4312/’)||/’2020-10-01/’}’})”/>
<input id=”d4312″ class=”Wdate” type=”text” onFocus=”WdatePicker({minDate:’#F{$dp.$D(/’d4311/’)}’,maxDate:’2020-10-01′})”/>

注意:
两个日期的日期格式必须相同

$dp.$ 相当于 document.getElementById 函数.
那么为什么里面的 ‘ 使用 /’ 呢? 那是因为 ” 和 ‘ 都被外围的函数使用了,故使用转义符 / ,否则会提示JS语法错误.
所以您在其他地方使用时注意把 /’ 改成 ” 或者 ‘ 来使用.

#F{$dp.$D(/’d4312/’)||/’2020-10-01/’} 表示当 d4312 为空时, 采用 2020-10-01 的值作为最大值

示例4-3-2 前面的日期+3天 不能大于 后面的日期

日期从 到
<input type=”text” class=”Wdate” id=”d4321″ onFocus=”WdatePicker({maxDate:’#F{$dp.$D(/’d4322/’,{d:-3});}’})”/>
<input type=”text” class=”Wdate” id=”d4322″ onFocus=”WdatePicker({minDate:’#F{$dp.$D(/’d4321/’,{d:3});}’})”/>

使用 $dp.$D 函数 可以将日期框中的值,加上定义的日期差量:
两个参数: id={字符类型}需要处理的文本框的id值 , obj={对象类型}日期差量
日期差量用法:
属性y,M,d,H,m,s分别代表年月日时分秒

zend framework 输入网页,发送邮件——zendframework 学习笔记之三

今天做的是给注册后的用户发送一个邮件,遇到些问题,在这里先说一下。

没有用zend自带的Zend_Mail组件,用的是在网上找到一个 发送邮件的类,用的是 socket方式发送 参考的PHP100视频教程。
在zf1.11.8中,直接用的 bin/zf.bat 生成的项目, Bootstrap.php和index.php 里面不在另外进行设置。要加载另外的类或者自己写的类最好是放在 models文件夹中,放在其他文件下 好像都会出现 找不到类,无法导入
使用了 这个类后,下面就是设置邮件的内容了
     $templater = new Zend_View();
     $templater->name=”welcome”;
     $templater->setScriptPath(‘./application/views/scripts/temp’); //设置文件路径
     $mailbody=$templater->render(‘regmail.phtml’); //

设置
文件名
这里最好把 模版文件用 .php或者 .phtml,我开始用的 .html后缀的文件 不能输出变量,不知道是不是我哪里弄错了,还是软件的问题。
反正改成 .phtml就好了,就可以输出变量了。
这样就设置好了,然后调用 邮件类,发送。就好了,今天一下午就学习了 这么点。。。
这进步好像是太慢了。

zend framework 登录 权限管理——zendframework 学习笔记之二

登录,权限管理都没有用 zend自带的组件。都是在 控制器里面完成的。主要说一下思路

用户进入网站,给用户一个 访客的身份。在indexAction里面,创建session对象 ,在判断

$mysession = Zend_Session_Namespace(‘mysession’);

if(!isset($mysession->role))

{

$mysession->role=’guest’;

}

登录后根据数据库的 身份,设置 $mysession->role的值。如果为member

登录后

$mysession->role=‘member’;

在输出数据的时候根据 $mysession->role 的值,进行判断。。。

Hello,World!

第一次用WP建博客,搭建好后会自动发一篇叫 <<Hello,World!>>的文章以示演示。突然让我想起 学了这么多门语言,虽然不是全部精通,还是每次学一门语言最开始都是输出 “Hello,World!”。现在想总结一下学过的语言,把各种语言输出 Hello,World! 的程序总结一遍。。。。第一个当然是 C语言#include <stdio.h>int main(){printf(“Hello World!\n”);return 0;}学了这么久,才知道 C语言才是王道阿。。。C++#include <iostream.h>int main(){cout<<“Hello World!”<<endl;return 0;}之后就是JAVAclass Hello{public static void main(String ars[]){System.out.print(“Hello World!\n”);}}JAVA强大的类库以上都是些编译语言,看来编译语言就学了 3种,而且忘得都差不多了。。。下面就是些脚本语言了。。。工作中还是用脚本语言用得比较多,开发速度较快在然后就应该是PHP了<?php  echo “Hello World!”  ?>Pythonprint “Hello World!”Python更类似 Shell脚本,直接在命令行里面输了。。。总结以上语言,各种语言基本上都差不多,只是语法有点不一样,但是算法和思路都还是相通的,看来还是 算法和思路最重要。。。接下来应该多看算法、数据结构之类的书。。。总结完毕