疯子的紫梦's 学习窝

PHP中设置FCKeditor2.6

FCKeditor 是一个十分强大的网页文本编辑器,它支持多种脚本编程语言和支持多国语言.如果你还不知道或者你知道还不会配置这个的话,请你继续往下看.
我用是FCKeditot的版本是2.6,官方网站上去下载 http://www.FCKeditor.net/

本文介绍的是关于php的配置方法,其他语言略有不同.
假 设网站的目录为: \FCKeditor 一:调用FCKeditor的两种方法 1:通过创建实例 在这里只写调用它的代码了,网站的其他代码当然由你自己写了,把下面的代码加在应该加的地方. <?php include_once("FCKeditor/fckeditor.php"); //引用FCKeditor.php这个文件 $FCKeditor=new FCKeditor(''welefen''); //创建FCKeditor对象的实例 $FCKeditor->BasePath=''FCKeditor/''; //FCKeditor所在的位置,这里它的位置就是''FCKeditor/''; $FCkeditor->ToolbarSet=''Default''; //工具按钮设置 $FCKeditor->Width=''100%''; //设置它的宽度 $FCKeditor->Height=''300px''; //设置它的高度 $FCkeditor->Create(); ?> 2:通过iframe调用创建 在你认为该加的地方加上 <INPUT id=content style="DISPLAY: none" type=hidden name="welefen"> <INPUT id=content___Config style="DISPLAY: none" type=hidden> <IFRAME id=content___Frame src="FCKeditor/editor/fckeditor.html?InstanceName=welefen&amp;Toolbar=Default" frameBorder=0 width=100% scrolling=no height=300> </IFRAME>

对上述两种方法的说明:
在 上述两种方法中,你都看到了字符串''welefen'',你可能不知道是什么意思,现在我给你解释一下 如果你要将文本编辑器中的内容在另外一个页面显示或者要将在它保存在数据库,你可以用 $_POST[''welefen'']或者用$_GET[''welefen'']来获取文本编辑器中的内容,具体是用post还是用get那要看你用 的是什么传递方法了 当然你也可以把welefen改成你想要用的,如''content''.
如果你还不知道什么是ajax,那么这一段话你就 不用看了. 当你用ajax的来获得内容的时候是不是发现得不到内容,如: <script>alert(document.form.content.value)</script>你会发现谈出的窗口 没内容 那么我们可以通过下面的代码来获得它的内容: function getContentValue() { var oEditor = FCKeditorAPI.GetInstance(''content'') ; var acontent=oEditor.GetXHTML(); return acontent; }

二:配置一些文件

1:fckconfig.js的配置

(1).工具按钮设置

查找FCKConfig.ToolbarSets["Default"],这里有很多按钮,下面我们将对他们详细介绍
EditSource 显示HTML源代码 StrikeThrough 删除线 Save 保存 Subscript 下标 NewPage 新建空白页面 Superscript 上标 Preview 预览 JustifyLeft 左对齐 Cut 剪切 JustifyCenter 居中对齐 Copy 复制 JustifyRight 右对齐 Paste 粘贴 JustifyFull 两端对齐 PasteText 纯文本粘贴 InsertOrderedList 自动编号 PasteWord 来自Word的粘贴 InsertUnorderedList 项目符号 Print 打印 Outdent 减少缩进 SpellCheck 拼写检查 Indent 增加缩进 Find 查找 ShowTableBorders 显示表格线 Replace 替换 ShowDetails 显示明细 Undo 撤销 Form 添加Form动作 Redo 还原 Checkbox 复选框 SelectAll 全选 Radio 单选按钮 RemoveFormat 去除格式 Input 单行文本框 Link 插入/编辑 链接 Textarea 滚动文本框 RemoveLink 去除连接 Select 下拉菜单 Anchor 锚点 Button 按钮 Image 插入/编辑 图片 ImageButton 图片按钮 Table 插入/编辑 表格 Hidden 隐藏 Rule 插入水平线 Zoom 显示比例 SpecialChar 插入特殊字符 FontStyleAdv 系统字体 UniversalKey 软键盘 FontStyle 字体样式 Smiley 插入表情符号 FontFormat 字体格式 About 关于 Font 字体 Bold 粗体 FontSize 字体大小 Italic 斜体 TextColor 文字颜色 Underline 下划线 BGColor 背景色
这个默认的是包含了所有的工具按钮,不过到我们具体要用的时 候,有的按钮并不需要,而且还影响速度.那么我们可以将我们不需要的按钮给删了.下面是我的配置,给大家一个参考,当然你可以根据你的喜好. FCKconfig.ToolbarSets["Default"] = [ [''EditSource'',''Save'',''NewPage'',''Preview'',''-'',''Cut'',''Copy'',''Paste'',''PasteText'',''-'',''Find'',''Replace'',''-'',''Undo'',''Redo'',''-'',''SelectAll'',''-'',''Link'',''RemoveLink'',''-'',''Image'',''Table'',''Rule'',''SpecialChar'',''Smiley''] , [''Bold'',''Italic'',''Underline'',''-'',''JustifyLeft'',''JustifyCenter'',''JustifyRight'',''-'',''InsertOrderedList'',''InsertUnorderedList'',''-'',''Form'',''Checkbox'',''Radio'',''Input'',''Textarea'',''Select'',''Button'',''-'',''FontStyleAdv'',''TextColor''] ] ;
如果在前台给用户回复一写帖子的话,还是没必要要上面的,这时你可以在加一个: FCKConfig.ToolbarSets["Basic"] = [ [''Bold'',''Italic'',''-'',''OrderedList'',''UnorderedList'',''-'',''Link'',''Unlink'',''-'',''About''] ] ;
这样的话,你在前台调用的时候就要用$FCKeditor->ToolbarSet=''Basic'',不能在为"Default"了.

(2):语言的配置
查找FCKConfig.DefaultLanguage将它设置为''zh-cn''.

(3):脚本语言的设置
查 找var _FileBrowserLanguage和var _QuickUploadLanguage将他们设置为''php'', 默认是''asp'',如果这里不设置的话,图片将不能上传,这点很重要.当时我在用FCKeditor由于没配置这个,不能上传图片,而我同寝室的用 asp能上传图片,让我烦恼了好多天,最后终于找到是这个原因.

2:图片上传的配置
打开文件FCKeditor/editor /filemanager/browser/default/connectors/php/config.php 查找$Config[''Enabled''],将它设置为''true'' 查找$Config[''UserFilesPath''],将它设置图片的目录,这个目录是相对于主目录的 //例如:我写了一个blog,就可以设置为/blog/upload/
打开文件FCKeditor/editor/filemanager /upload/php/config.php 查找$Config[''Enabled''],将它设置为''true'' 查找$Config[''UseFileType''],将它设置上传文件的目录,最好与上面的图片目录相同
好了,现在所有的配置都已经完成了,现在你要做的只是删除一些不必要的文件了 只要包含''_''的目录名和文件名都可以删除,当然你用的是php,其他语言的一些目录也都可以删除,这样就减小了文件的大小.
FCKEDITOR的FCKeditor_2.6\fckeditor\_samples下有各种语言使用的例子
关键要注意设置BasePath正确,否则找不到文件.

 

 

 

 

说起 这个,更是郁闷,网上找了N篇资料,那是越看越迷糊啊,最后还是自己看代码搞定的。为了方便日后学习也小记一下吧。

1、下载FCKeditor 多国语言版

2、解压后为文件夹减肥:

删除/FCKeditor/目录下除fckconfig.js, fckeditor.js, fckstyles.xml, fcktemplates.xml,fckeditor.php五个文件以外的所有文件
删除目录/editor/_source,_testcases(基本上,所有_开头的文件夹或文件都是可选的),
删除/editor/filemanager/browser/default/connectors/下除PHP目录的所有目录
删除/editor/filemanager/upload/下的除PHP目录的所有目录
删除/editor/lang/下的除了 en.js, zh.js, zh-cn.js三个文件的所有文件

3.

 

打开/FCKeditor/fckconfig.js

 

修改

 

var FCKConfig.DefaultLanguage = 'zh-cn' ;

 

var _FileBrowserLanguage  = 'php' ;

 

var _QuickUploadLanguage  = 'php' ;

 

要 开启文件上传的话,还需要配置FCKeditor\editor\filemanager\upload\php\config.php以及 \FCKeditor\editor\filemanager\browser\default\connectors\php\config.php

 

(上传中文名文件会乱码)

 

4.调用

方法

将FCKeditor放在网站根目录

 

在PHP文件里面,包含/FCKeditor/fckeditor.php文件

 

//包含fckeditor类

 

include("../FCKeditor/fckeditor.php") ;

 

//设置编辑器路径

 

$sBasePath = "/FCKeditor/";

 

//创建一个Fckeditor,表单的名称为ipaddr

 

$oFCKeditor = new FCKeditor('ipaddr') ;

 

$oFCKeditor->BasePath  = $sBasePath ;

 

//设置表单初始值

 

$oFCKeditor->Value  = 'This is some <strong>sample text</strong>' ;

 

$oFCKeditor->Create() ;

 

//还可设置

 

$oFCKeditor->Width

 

$oFCKeditor->Height

 

$oFCKeditor->ToolbarSet

 

5.定制

 

a.定制调用路径

 

直接将FCKeditor目录改为editor/,并且在调用的时候指定根路径为/editor/。

 

b.定制风格

 

可以通过修改editor\skins目录下的Skin来定制风格,主要是修改

CSS

 

c.定制toolbar

 

在fckconfig.js中,默认定制好了Default,Basic两种toolbar,你也可以根据格式定制自己的toolbar,并且在php中使用$oFCKeditor->ToolbarSet=toolbarname调用

 

d.定制字体

 

将fckconfig.js里面的FCKConfig.FontNames字体列表前面加上:

 

宋体;黑体;隶书;楷体_GB2312;

 

(注意保存为UTF8格式)

 

e.关闭文件上传

 

i. 将fckconfig.js里面的 FCKConfig.LinkBrowser,FCKConfig.ImageBrowser,FCKConfig.FlashBrowser,FCKConfig.LinkUpload,FCKConfig.ImageUpload,FCKConfig.FlashUpload 设置为false.

 

ii.直接将filemanager里面的php文件删降

 

iii.定制toolbars

 

最重要的一点,你需要更改filemanager下面的php文件,只有认证的用户才可以访问。

 

f.注意事项:请用Editplus之类的编辑器编辑配置文件,注意保存格式为utf8.

 

 

百度空间用的好像就是fckeditor,呵呵

参考了一些网友的方法,现总结一下2.6.4版本的配置,删除不需要的文件我这儿就不说了,网上到处都是,fckeditor 2.6.4 版本中默认就是支持php的,所以不需要另外修改变量

解压到站点后,首先是对fckconfig.js的配置:

修改语言:
FCKConfig.DefaultLanguage = 'zh-cn' ;

也可以修改工具栏按钮:
FCKConfig.ToolbarSets["MyStyle"] = [
['Source','Preview','FitWindow','-','Templates'],
['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
['Image','Flash','Table','Rule','Smiley','SpecialChar','PageBreak'],
['ShowBlocks'],
'/',
['Bold','Italic','Underline','StrikeThrough','TextColor','BGColor'],
['OrderedList','UnorderedList','-','Outdent','Indent','Blockquote','CreateDiv'],
['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],
['Link','Unlink','Anchor'],
'/',
['Style','FontFormat','FontName','FontSize']
    // No comma for the last row.
] ;

然后重要的就是修改fckeditor\editor\filemanager\connectors\php\config.php(请注意,之前的版本目录结构有些不同)使之支持文件上传:

$Config['Enabled'] = true ;
$Config['UserFilesPath'] = '/mysite/upload/' ;
   //此路径是相对于服务器根目录而言的,当然这个目录要存在咯

 

这样就行了,用法这里就不多说了,还有一点需要注意的是用fckeditor上传图片的时候,对firefox的支持好像有点问题,不能浏览本地文件上传至服务器,算是一个bug吧

require include 的区别

1.如果 require的文件不存在,程序停止运行
如果 include的文件不存在,给出错误信息后还要运行

2.require用相对路径的时候
当A引用B,而B又引用了其他文件C时,C的路径如果是相对路径,则是相对于A的路径,而不是相对于B的'

3. include() && include_once():程序执行到那里才执行
require() && require_once():不管放在页面的哪个地方都先执行

常用正则表达式

平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用:
"^\d+$"  //非负整数(正整数 + 0)
"^[0-9]*[1-9][0-9]*$"  //正整数
"^((-\d+)|(0+))$"  //非正整数(负整数 + 0)
"^-[0-9]*[1-9][0-9]*$"  //负整数
"^-?\d+$"    //整数
"^\d+(\.\d+)?$"  //非负浮点数(正浮点数 + 0)
"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮点数
"^((-\d+(\.\d+)?)|(0+(\.0+)?))$"  //非正浮点数(负浮点数 + 0)
"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点数
"^(-?\d+)(\.\d+)?$"  //浮点数
"^[A-Za-z]+$"  //由26个英文字母组成的字符串
"^[A-Z]+$"  //由26个英文字母的大写组成的字符串
"^[a-z]+$"  //由26个英文字母的小写组成的字符串
"^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串
"^\w+$"  //由数字、26个英文字母或者下划线组成的字符串
"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"    //email地址
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"  //url
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/   //  年-月-日
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/   // 月/日/年
"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$"   //Emil
/^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/     //电话号码
"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$"   //IP地址

匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?
匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$


元字符及其在正则表达式上下文中的行为:

\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。

^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性,^ 也匹配 ’\n’ 或 ’\r’ 之后的位置。

$ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性,$ 也匹配 ’\n’ 或 ’\r’ 之前的位置。

* 匹配前面的子表达式零次或多次。

+ 匹配前面的子表达式一次或多次。+ 等价于 {1,}。

? 匹配前面的子表达式零次或一次。? 等价于 {0,1}。

{n} n 是一个非负整数,匹配确定的n 次。

{n,} n 是一个非负整数,至少匹配n 次。

{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格。

? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。

. 匹配除 "\n" 之外的任何单个字符。要匹配包括 ’\n’ 在内的任何字符,请使用象 ’[.\n]’ 的模式。
(pattern) 匹配pattern 并获取这一匹配。

(?:pattern) 匹配pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。

(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。

(?!pattern) 负向预查,与(?=pattern)作用相反

x|y 匹配 x 或 y。

[xyz] 字符集合。

[^xyz] 负值字符集合。

[a-z] 字符范围,匹配指定范围内的任意字符。

[^a-z] 负值字符范围,匹配任何不在指定范围内的任意字符。

\b 匹配一个单词边界,也就是指单词和空格间的位置。

\B 匹配非单词边界。

\cx 匹配由x指明的控制字符。

\d 匹配一个数字字符。等价于 [0-9]。

\D 匹配一个非数字字符。等价于 [^0-9]。

\f 匹配一个换页符。等价于 \x0c 和 \cL。

\n 匹配一个换行符。等价于 \x0a 和 \cJ。

\r 匹配一个回车符。等价于 \x0d 和 \cM。

\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。

\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

\t 匹配一个制表符。等价于 \x09 和 \cI。

\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。

\w 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。

\W 匹配任何非单词字符。等价于 ’[^A-Za-z0-9_]’。

\xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。

\num 匹配 num,其中num是一个正整数。对所获取的匹配的引用。

\n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。

\nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式,则 nm 为后向引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。

\nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。

\un 匹配 n,其中 n 是一个用四个十六进制数字表示的Unicode字符。

匹配中文字符的正则表达式: [u4e00-u9fa5]

匹配双字节字符(包括汉字在内):[^x00-xff]

匹配空行的正则表达式:n[s| ]*r

匹配HTML标记的正则表达式:/<(.*)>.*</1>|<(.*) />/

匹配首尾空格的正则表达式:(^s*)|(s*$)

匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*

匹配网址URL的正则表达式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?

利用正则表达式限制网页表单里的文本框输入内容:

用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"

用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"

用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"

用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"

=========常用正则式



匹配中文字符的正则表达式: [\u4e00-\u9fa5]

匹配双字节字符(包括汉字在内):[^\x00-\xff]

匹配空行的正则表达式:\n[\s| ]*\r

匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/

匹配首尾空格的正则表达式:(^\s*)|(\s*$)

匹配IP地址的正则表达式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

匹配网址URL的正则表达式:http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

sql语句:^(select|drop|delete|create|update|insert).*$

1、非负整数:^\d+$

2、正整数:^[0-9]*[1-9][0-9]*$

3、非正整数:^((-\d+)|(0+))$

4、负整数:^-[0-9]*[1-9][0-9]*$

5、整数:^-?\d+$

6、非负浮点数:^\d+(\.\d+)?$

7、正浮点数:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

8、非正浮点数:^((-\d+\.\d+)?)|(0+(\.0+)?))$

9、负浮点数:^(-((正浮点数正则式)))$

10、英文字符串:^[A-Za-z]+$

11、英文大写串:^[A-Z]+$

12、英文小写串:^[a-z]+$

13、英文字符数字串:^[A-Za-z0-9]+$

14、英数字加下划线串:^\w+$

15、E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$

16、URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$
或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$

17、邮政编码:^[1-9]\d{5}$

18、中文:^[\u0391-\uFFE5]+$

19、电话号码:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$

20、手机号码:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$

21、双字节字符(包括汉字在内):^\x00-\xff

22、匹配首尾空格:(^\s*)|(\s*$)(像vbscript那样的trim函数)

23、匹配HTML标记:<(.*)>.*<\/\1>|<(.*) \/>

24、匹配空行:\n[\s| ]*\r

25、提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?

26、提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

27、提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?

28、提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)

29、提取信息中的中国手机号码:(86)*0*13\d{9}

30、提取信息中的中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}

31、提取信息中的中国电话号码(包括移动和固定电话):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}

32、提取信息中的中国邮政编码:[1-9]{1}(\d+){5}

33、提取信息中的浮点数(即小数):(-?\d*)\.?\d+

34、提取信息中的任何数字 :(-?\d*)(\.\d+)?

35、IP:(\d+)\.(\d+)\.(\d+)\.(\d+)

36、电话区号:/^0\d{2,3}$/

37、腾讯QQ号:^[1-9]*[1-9][0-9]*$

38、帐号(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

39、中文、英文、数字及下划线:^[\u4e00-\u9fa5_a-zA-Z0-9]+$

在PHP开发中养成7个面向对象的好习惯

PHP基本上就是一种数组语言。时常要进行大量的数组循环操作,主要有两种方式,一种是foreach,另一种是while,到底哪种好哪种坏一直有争论,虽然我很早就意识到了这个问题,但是一直没有细究,懵懂的感觉一直持续到现在,为了以后能节省点CPU时间,下面总结一下:

在循环里进行的是数组“读”操作,则foreach比while快:

无格式查看复制到剪贴板打印代码?

foreach ($array as $value) {  
    echo $value;  
}    
while (list($key) = each($array)) {  
    echo $array[$key];  
}  
foreach ($array as $value) {
    echo $value;
}
while (list($key) = each($array)) {
    echo $array[$key];
}

在循环里进行的是数组“写”操作,则while比foreach快:

无格式查看复制到剪贴板打印代码?

foreach ($array as $key => $value) {  
    echo $array[$key] = $value . '...';  
}    
while (list($key) = each($array)) {  
    $array[$key] = $array[$key] . '...';  
}  
foreach ($array as $key => $value) {
    echo $array[$key] = $value . '...';
}
while (list($key) = each($array)) {
    $array[$key] = $array[$key] . '...';
}

总结:通常认为,foreach涉及到值复制,一定会比while慢,但实际上,如果仅仅是在循环里进行数组的读操作,那么foreach是很快的,这是因为PHP采用的复制机制是“引用复制,写时拷贝”,这样看来,foreach的高效读操作就不难理解了。

另外,既然foreach不适合处理数组写操作,那么我们可以得出一个结论,多数情况下,类似foreach ($array as $key => $value)形式的代码都应该被替换成while (list($key) = each($array))。

这些技巧产生的速度差异在小项目里可能并不明显,但是在类似框架这样的大项目中,一次请求动辄便会涉及到几百几千几万次数组循环操作,差异就会明显放大。

MYSQL 数据类型

数据类型 描述 字节

推荐使用

SMALLINT 整数,从-32000到+32000范围 2 存储相对比较小的整数
例如:年纪,数量
INT 整数,从-2000000000到+2000000000 4 存储中等整数
例如:距离
BIGINT 不用用SMALLINT或INT描述的超大整数 8 存储超大的整数
例如:科学/数学数据
FLOAT 单精度浮点型数据 4 存储小数数据
例如:测量,温度
DOUBLE 双精度浮点型数据 8 需要双精度存储的小数数据
例如:科学数据
DECIMAL 用户自定义精度的浮点型数据 变量;取决于精度与长度 以特别高的精度存储小数数据
例如:货币数额,科学数据
CHAR 固定长度的字符串 特定字符串长度(高达255字符) 存储通常包含预定义字符串的变量
VARCHKAR 具有最大限制的可变长度的字符串 变量;1+实际字符串长度(高达255字符) 存储不同长度的字符串值(高大一个特定的最大限度)
例如:名字,密码,短文标签
TEXT 没有最大限制的可变   存储大型文本数据
例如:新闻故事,产品描述
BLOB 二进制字符串 变量;2+实际字符串长度 存储二进制数据
例如:图片,附件,二进制文档
DATE 以yyyy-mm-dd格式的日期 3 存储日期
例如:生日
TIME 以hh:mm:ss格式的时间 3 存储时间或时间间隔
例如:报警声,两时间之间的间隔,任务开始/结束时间
DATETIME 以yyyy-mm-ddhh:mm:ss格式结合日期和时间 8 存储包含日期和时间的数据
例如:提醒的人,事件
TIMESTAMP 以yyyy-mm-ddhh:mm:ss格式结合日期和时间 4 记录即时时间
例如:事件提醒器,"最后进入"的时间标记
YEAR 以yyyy格式的年份 1 存储年份
例如:毕业年,出生年
ENUM 一组数据,用户可以从中选择一个 1或2个字节 存储字符属性,只能从中选择之一
例如:布尔量选择,如性别
SET 一组数据,用户可以从中选择其中0,1或更多 从1到8字节;取决于设置的大小 存储字符属性,可从中选择多个字符的联合.
例如:多选项选择,比如业余爱好和兴趣