蓝色魔法

蓝色的魔法,永恒的世界.

如何获得更快的页面载入速度,写在PageRank加入载入速度之后.

十一月16

就在不久前Google大神决定把页面载入速度加入PageRank指数的一个指标. 本人比较赞同, 有多少人愿意等10-20秒去载入一个不知道是否有自己所需要的内容的页面? 我不会, 如果一个页面10秒内还没出现我要的信息, 我一定会直接关闭找下一个搜索结果去.

但是同时作为网页编写者我也深知页面载入速度70%在于,网络速度, 客户和服务器的距离, 编程者能做的确是不多, 而换一个更快的服务器开销也不是人人都可以受得起.

虽然情况如实但是作为编写者我们还是可以为载入速度做一点努力的. 这里就介绍一个提速的小方法. 对网页源码的精简是必须的, 更好的逻辑, 更少的数据库查询等等都可以帮助网页载入速度的提高做出贡献. 但是毕竟这样的提速方法是有限的. 网页速度最大的问题是什么? 不是代码, 不是计算, 而是图片, flash,媒体等. 随便打开一个大网站什么东西最先看到, 什么最后? 很多人的感觉都是最先出现的一定是文字, 而最后慢慢载入的一定是图片和Flash. 就技术上来说PHP,ASP等后台语言是通过服务器计算, 通常服务器都有强大的CPU所以大量计算不是问题. 而JS是客户端语言在电脑上计算也不会很慢. (当然对于计算Integral之类微积分问题除外.)  慢的永远是图片的载入, 一场图片100K左右, flash在500K左右, 如果用200k每秒速度去载入10张图片5张flash也需要7秒. 而如果你做的不是图片或者是Flash网站,那么很多时候这些图片都是装饰,或者辅助类的, 是否完全载入对于客户来说影响并不大.

说了那么多其实就是一条, 图片和Flash其实不需要和网页一起载入. 对于有些浏览器, 例如opera,chrome等, 开发者已经意识到这点, 如果你观察的仔细你会发现opera刚载入的一张页面的时候, 页面内的图片是模糊的, 然后才慢慢的清晰. 其实开发者这么做就是为了提速, 先载入重要文字, 计算等信息于此同时载入低清晰的图片,把网页的轮廓做出来, 最后再载入完整的图片. 这样做就会让客户先查看他们需要东西同时不破外网页的格局而又不需要等待网页完全载入完那么久.

那么有了这个思路作为网页开发者的我们也可以用相同的方法提速, 而且可以做到一些浏览器无法做到的,同时还可以提速PageRank. 方法是用JS的readystatus来异步载入, 此方法有点类似AJAX. 大概逻辑如下. 首先我们载入所有最重要的内容, 例如文章标题,内容等, 然后等所有重要的东西都载入完了再载入图片. 这样做的好处是不单单用户体验得到了提升, PageRank也可以得到提升. 应为当你载入完所有重要内容后PageRank的系统记录你已经载入完成, 那么计时也停止了, 虽然你的图片还没载入. 但是这些图片并不影响整体页面. 这样的话虽然是同一个页面, 但是载入时间在PageRank那却不一样, 用户体验也大大提升.

那么如何实现呢? 其实很简单, 代码如下

window.onload=function ()
{
//载入图片. 用getElementsById()等方法.
}

这里你可以写一些代码自己看看效果. 例如可以用两张不同图片image1和image2(差不多大小.), 代码中你把image1写在image2前面,在image后门写了一些文字代码, 接着改变image2的载入方法, 然后观察哪些先出现在浏览器上. 如果不用以上方法, 你应该看到的顺序是, 文字->图片1-(同时或者之后)>图片2. 也许图片2先载入完, 但是图片2不会比图片1先开始载入. 而用了上面的方法你应该先看到, 文字和图片2, 等图片2完全载入完后才看到图片1. 这样我们的目的就达到了. 在实际应用中图片2也许是比较重要的图片信息, 而图片2可能是比较不重要的辅助图片或者装饰,背景等.  同时如果你够细心你会发现浏览器的状态栏在图片2载入完的同时显示页面已经载入完了, 但是图片1还在载入中.

代码很简单但是如果用得好效果非凡. 某些图片可以之后载入某些则需要同时载入, 而作为网页编程者我们可以灵活的转变, 这点事浏览器做不到的. 所以合理的安排你网页上的图片和媒体, 给用户最佳的体验这才是一个好的网页编程者所需要做的.

最后: 请不要滥用这个方法, 例如把所有东西都搬进onload,用来欺骗PR提高网速等. 这里的方法对搜索引擎收录的影响尚不知, 但是如果仅仅运用在图片上相信影响几乎没有. 所以请大家善用此方法.

posted under HTML, PHP, 网页技术 | 评论关闭

PHP如何合理的分页.

十月8

当拥有大量需要呈现给用户时, 一次性把所有数据都显示出来显然不是一个人性化的做法. 一是这样用户会有一种被数据淹没的感觉, 而且非常破坏网页美观, 这个时候就需要用到分页. 分页技术可以再很多地方用到, 例如多个商品需要呈现给客户, 多幅图片等等. 如何合理非常重要. PHP要分页显示说难不难说容易也不容易. 这里我们用从数据库中读取N条数据并且对其进行分页作为例子. 本文的主要目的是让大家了解分页的概念. 先从变量开始, 既然是分页我们就需要个记录总页数的和当前页数的变量, $totalPage, $currentPage, 当前页如无特殊情况默认为0, 那么总页数就需要一些计算了. 计算总页数的方法也和简单,不过在计算之前我们还需要一个变量, $pageSize 每页显示数量和 $totalData需要显示的数据总数. 从数据库读取所有符合要求的数据, 例如价格大于100, 性别等于女等等, 然后用总数除每页显示数量. 不过这里要注意的不能整除的情况. 例如一共8个,每页3个, 那么这样总页数应该是3页而非2.xx页,所以我们用ceil()函数去最小整数. 代码如下:

//计算一共有多少条有效数据

$sql = “select count(*) as amount from table”;

$result = mysql_query($sql);

$row = mysql_fetch_row($result);

$totalData = $row['amount'];

$totalData = ceil($totalData/$pageSize);

这样我们分页的准备工作就都做好了.

接下来就是显示部分, 其实现实部分没什么难点当你学会接下啦的limit的用法.

$sql = “select count(*) as amount from table limit $currentPage*$pageSize, $pageSize

注意limit的部分, limit 0,5意思就是说从第0条数据开始, 读5条数据. 那么上面的代码的意思是, 从当前页*每页数量开始, 读取你设定的每页数量那么多条数据.

接着就按照普通的方法while显示数据就可以了.

最后就是页数导航了用各一个简单的for循环输出就可以了.

这样你的分页就完成了.

如何解决Discuz!在Google Chrome中分类选择位置错误的方法.

九月20

2个方法修改, 第一找到你的风格目录下的 “templates/风格名字/css_append.htm” 在里面查找.float_typeid ul替换成下面的代码,如果找不到直接在插入以下代码就可以了. (此方法只修改你指定的风格,其他风格如果需要也要做同样修改.)

.float_typeid ul{ margin: -22px 0 0; border: 1px solid {HIGHLIGHTLINK}; background:{INPUTBG} url({IMGDIR}/newarow.gif) no-repeat 100% -20px;left:320px; }

方法2: 在 “templates/default/css_common.htm” 里找到.float_typeid ul然后添加红字部分. (此方法修改所有风格,包括默认. 如果对某个风格无效请用方法1对此风格进行单独修改.)

.float_typeid ul{ margin: -22px 0 0; border: 1px solid {HIGHLIGHTLINK}; background:{INPUTBG} url({IMGDIR}/newarow.gif) no-repeat 100% -20px;left:320px; }

不要忘了去后台界面-风格管理里更新CSS缓存哦.

编者注: 其实Chrome对Discuz的支持还是不够, 虽然之前Google宣称解决了很多对Discuz兼容性的问题. 也不知道是Discuz写的不够标准还是Chrome的引擎为了速度放弃了兼容. 就编者所知道的Discuz7在Chrome里的Bug有管理帖子时AJAX置顶,分类等都无法正常显示只显示选中x贴然后内容就消失了,还有几个其他bug但是一时想不起来了. 希望Discuz能联合Chrome一起做出努力, 不过再那之前我们还是回到IE和Firefox的怀抱吧.

函数(function)和类(class)在PHP用要如何选择?

四月1

其实function和class在php非常相似. 事实上在实际使用中这2者并没有必须, 换句话说如果可以用function实现class也能做到,反之也一样. 因为这样很多人都非常困惑到底哪个好呢?

事实上很多人最先接触的是function所以先入为主就一直用函数了,因为一直用函数也未遇到什么瓶颈, 加上函数的语法清晰明了. 但是突然的class走入了眼帘, 也许是读其他程序时也许是浏览网页时, 无论怎么样第一感觉是很陌生的标记和语法, 于是我们去找教程, 其实class也不难, 经过一段时间的学习, 越来越发现class就是funcition双胞胎哥哥.

那么进入主题, 到底怎么用比较合理呢? 就如我上面说的, 没有其中一个实现不了的功能所以,以下的一切不是必须, 只是个人觉得比较合理的方法.

何时用Class

  1. 参数很多, 当参数很多的时候function调用的时候就很容易出错, 少写,漏写某些参数都会造成function无法正常运行.
  2. 有一些局部的默认参数, 并且有较小可能在将来使用时需要改变. 这样的话你不必为了某此调用需要改变该参数而每次都调用都重复一次该参数, 甚至是重复写一次function.

何时不用Class:

  1. 当有全局默认参数的时候. 打个比方, 比如分页类, 每页数量可以让后台用户自己改变时就不适合用class,因为那样的话要么你要去单独找这个class然后修改要么,多次重复调用相同的文件.
  2. 很简单的功能, 如果内容很简单,不要浪费你的时间去写一个class直接function,没什么原因, 更短的代码=更快的速度和宝贵的时间.

基本就这样了, 相信用多了一会你也能找出一条自己的规则来.

PHP网站代码应该如何管理和分类.

三月8

这个问题一直困扰了我很久. PHP网站的代码要怎么写才比较合理. 对于小站来说用模板技术,例如smarty之类的确实不怎么方便. 因为整个网站的美工+代码都是一个人完成,如果硬要分开来去弄反而降低网站开发速度. 但是如果把php代码完全的混合进html那么以后修改会非常麻烦, 就算是小站,N年都一个样子自己都看烦了.

1.函数化

既然不用模板那么最好的办法就是吧代码区块化和函数化. 例如, 你要显示文章列表, 当然你可以直接在表格内用while循环读出文章标题, 不过, 这里推荐把这些代码做成一个函数然后加上一些常用的参数例如,文章显示数量, 类型等等. 这样的好处是,你的页面不会非常乱, 而且你可以随意的搬动这个函数,然后随意的调用他. 不但页面干净了, 也不用不断的重新类似的代码从而节约很多宝贵的时间.

2.区分开常用函数和非常用函数

所谓的常用函数就是那些几乎每个页面都要调用的函数, 例如, 站点新闻. 我把站点的更新新闻做成一个函数而这个函数几乎在站点内所有页面都需要,那么这个就是常用函数. 反之, 如果某些函数只在特定页面有用那么这个就是非常用函数. 当你区分开里一会那么请把所有常用函数搬到一个单独文件里,然后再站点所有页面里包括这个函数, 然后把非常用的函数放到你需要调用的页面的底部并把这个区域规划为函数区, 无论是php还是js函数都放到这个区域方便管理. (要注意的是请详细的写明每个函数的用途并加上”//某函数 开始/结束”在函数头和尾)

3.函数不能写的太复杂.

之前所说的吧给类东西都写成函数然后加上参数来适应各种页面不同显示需求也许有人会把一个函数+上几十个参数来让他适应所有环境. 这样的做法就有违了我们的本意. 我们要让代码更容易懂和修改, 如果把很多参数写进一个函数那么想必这个函数会非常复杂, 更改任何一个代码都有可能造成函数无法正常运行. 所以这里要注意函数的复杂程度. 如果有2个页面同样需要调用类似的函数, 例如, 一个页面要让文章列表树状显示还有一个则是区块状. 你可以在函数里设一个if语句来满足不同的需求但是比较好的方法是分开写2个函数.

4.根据自己习惯命名变量和函数.

学php的人看了很多网络教程或者书也许认为跟书上做总没错就连变量命名也跟着书上网站的写, 结果是代码是写完了, 当时很高兴很满意,但是2分钟后回来一看立刻变天书. 所以如果你不知道什么是query, db, handle等等英文是什么意思那么请用中文拼音或者你很熟悉的英文代替. 只要你能保持同一种命名方式就可以. 千万不要盲目的跟写, 和随意的改变命名方式. 只有适合自己的方式才是最好的方式

如何更加方便的管理里的代码的方法还有很多很多, 不过适合自己的只有一种. 慢慢摸索和借鉴总能找到属于自己的方法.

posted under PHP | No Comments »

发2个手册,一个php一个javascript

二月15

这2个手册是个人用下来不错的.

php手册里面包括了很多网友留言,但是可惜这本手册不是完全翻译,有些函数没有翻译过来,不过是完全本地化的手册.

JS手册是完全中文版的,不错的,挺简洁.

javascript

PHP手册

posted under HTML, PHP | No Comments »

一篇PHP字符串处理函数大全

二月15

AddSlashes: 字符串加入斜线。
bin2hex: 二进位转成十六进位。
Chop: 去除连续空白。
Chr: 返回序数值的字符。
chunk_split: 将字符串分成小段。
convert_cyr_string: 转换古斯拉夫字符串成其它字符串。
crypt: 将字符串用 DES 编码加密。
echo: 输出字符串。
explode: 切开字符串。
flush: 清出输出缓冲区。
get_meta_tags: 抽出文件所有 meta 标记的资料。
htmlspecialchars: 将特殊字符转成 HTML 格式。
htmlentities: 将所有的字符都转成 HTML 字符串。
implode: 将数组变成字符串。
join: 将数组变成字符串。
ltrim: 去除连续空白。
md5: 计算字符串的 MD5 哈稀。
nl2br: 将换行字符转成 <br>。
Ord: 返回字符的序数值。
parse_str: 解析 query 字符串成变量。
print: 输出字符串。
printf: 输出格式化字符串。
quoted_printable_decode: 将 qp 编码字符串转成 8 位字符串。
QuoteMeta: 加入引用符号。
rawurldecode: 从 URL 专用格式字符串还原成普通字符串。
rawurlencode: 将字符串编码成 URL 专用格式。
setlocale: 配置地域化信息。
similar_text: 计算字符串相似度。
soundex: 计算字符串的读音值
sprintf: 将字符串格式化。
strchr: 寻找第一个出现的字符。
strcmp: 字符串比较。
strcspn: 不同字符串的长度。
strip_tags: 去掉 HTML 及 PHP 的标记。
StripSlashes: 去掉反斜线字符。
strlen: 取得字符串长度。
strrpos: 寻找字符串中某字符最后出现处。
strpos: 寻找字符串中某字符最先出现处。
strrchr: 取得某字符最后出现处起的字符串。
strrev: 颠倒字符串。
strspn: 找出某字符串落在另一字符串遮罩的数目。
strstr: 返回字符串中某字符串开始处至结束的字符串。
strtok: 切开字符串。
strtolower: 字符串全转为小写。
strtoupper: 字符串全转为大写。
str_replace: 字符串取代。
strtr: 转换某些字符。
substr: 取部份字符串。
trim: 截去字符串首尾的空格。
ucfirst: 将字符串第一个字符改大写。
ucwords: 将字符串每个字第一个字母改大写。

addslashes
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数使需要让数据库处理的字符串,引号的部份加上斜线,以供数据库查询 (query) 能顺利运作。这些会被改的字符包括单引号 (‘)、双引号 (“)、反斜线 backslash (\) 以及空字符 NUL (the null byte)。
参考: stripslashes() htmlspecialchars() quotemeta()

bin2hex
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数让二进位字符串转成十六进位字符串。
使用范例
补充:
josh@superfork.com (22-Jun-1999) 写了一个函数,可将十六进位转成二进位。
<?
function hex2bin($data) {
$len = strlen($data);
for($i=0;$i<$len;$i+=2) {
$newdata .= pack(“C”,hexdec(substr($string,$i,2)));
}
return $newdata;
}
?>

chop
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数将字符串的连续空白清除。
使用范例
<?
$trimmed = Chop($line);
?>
参考: trim()

chr
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数将字符的序数转成 ASCII 的字符。本函数和 ord() 成对照。
使用范例
<?
$str .= chr(27);
$str = sprintf(“字符串的结束字符是: %c”, 27);
?>
参考: ord() sprintf()

chunk_split
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数将字符变成小段供其它函数使用。例如,base64_encode。内定是参数 chunklen (76 个字符) 每隔 76 个字符插入 end (“\r\n”)。返回新字符串而不改动原字符串。
使用范例
将字符串 $data 格式化成 MIME BASE64 格式
<?
$new_string = chunk_split(base64_encode($data));
?>
参考: ereg_replace()

convert_cyr_string
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数将古斯拉夫字符串转成其它的字符串。from 及 to 二个参数是字符,其代表意义如下:
k – koi8-r
w – windows-1251
i – iso8859-5
a – x-cp866
d – x-cp866
m – x-mac-cyrillic

crypt
语法: string crypt(string str, string [salt]);
返回值: 字符串
函数种类: 编码处理
内容说明: 本函数将字符串用 UNIX 的标准加密 DES 模块加密。这是单向的加密函数,无法解密。欲比对字符串,将已加密的字符串的头二个字符放在 salt 的参数中,再比对加密后的字符串。
更详细的资料请参考 UNIX Manual (man) 中的 crypt。
在一些较新的 UNIX 版本中,除了 DES 之外还提供了其它的加密模块,如 MD5。甚至有些系统还用 MD5 取代 DES。在 salt 参数还有一些变化,端看传给 salt 参数的字符串长度而定:
CRYPT_STD_DES – 标准的 DES 编码,输入 2 字符的 salt。
CRYPT_EXT_DES – 延伸的 DES 编码,输入 9 字符的 salt。
CRYPT_MD5 – MD5 编码,输入 12 字符加上 $1$ 的 salt。
CRYPT_BLOWFISH – 延伸的 DES 编码,输入 16 字符加上 $2$ 的 salt。
此外,若不使用 salt 参数,则程序会自动产生。

echo
返回值: 无
函数种类: PHP 系统功能
内容说明: 本函数将字符串输出。由于它不是真正的函数,因此也没有返回值。
使用范例
<?php
echo “Hello World”;
?>
参考: print() printf() flush()

explode
返回值: 数组
函数种类: 资料处理
内容说明: 本函数将字符串依指定的字符串或字符 separator 切开。将切开后的字符串返回到数组变量中。
使用范例
<?
$pizza = “第一片 第二片 第三片 第四片 第五片 第六片”;
$pieces = explode(” “, $pizza);
?>
参考: implode()

flush
返回值: 无
函数种类: 资料处理
内容说明: 本函数无输入亦无输出。将输出缓冲区的资料送出,并清出。

get_meta_tags
语法: array get_meta_tags(string filename, int [use_include_path]);
返回值: 数组
函数种类: 资料处理
内容说明: 本函数将 homepage 中的所有 <meta ……> 标记的资料取出并放置数组变量返回。例如
<html>
<head>
<meta content=”彭武兴”>
<meta content=”PHP BIBLE”>
<title>PHP BIBLE</title>
</head><!– 本函数处理只到这儿结束 –>
本函数找出 meta 标记,name 属性的字符串为数组索引,而 content 属性字符串则为数组的内容资料了。注意的是本函数为 PHP 原生函数,在 UNIX 系列平台上无法直接处理麦金塔的文件格式,因为换行字符不同。
blake@mediaone.net 指出 (07-Jun-1999),参数 filename 也可以是 URL,函数将抽出远端服务器的文件 meta 标记。而函数在处理时,遇到 </head> 标记结束,要是 <meta ….> 标记放在 </head> 后将无法处理。

htmlspecialchars
语法: string htmlspecialchars(string string);
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数将特殊字符转成 HTML 的字符串格式 ( &….; )。最常用到的场合可能就是处理客户留言的留言版了。
& (和) 转成 &
” (双引号) 转成 ”
< (小于) 转成 &lt;
> (大于) 转成 &gt;
此函数只转换上面的特殊字符,并不会全部转换成 HTML 所定的 ASCII 转换。
使用范例
这是
aulbach@unter.franken.de (27-Jan-1999) 所提供的范例
<FORM ACTION=bla>
<H2>Restaurant Description<H2>
Name of restaurant:
<INPUT TYPE=text VALUE=”<?
echo HTMLSpecialChars($restname); ?>”>
<!– 变量 $restname 是酱子的 $restname=”\”The White Horse\”"; –>
<BR>
输入描述 (若您会 HTML,可直接使用): <BR>
<TEXTAREA ><?
echo HTMLSpecialChars($descript);
?></TEXTAREA>
<INPUT TYPE=submit>
</FORM>
参考: htmlentities() nl2br()

htmlentities
语法: string htmlentities(string string);
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数有点像 htmlspecialchars() 函数,但本函数会将所有 string 的字符都转成 HTML 的特殊字集字符串。不过在转换后阅读网页源代码的方面,会有很多困扰,尤其是网页源代码的中文字会变得不知所云,浏览器上看到的还是正常的。

implode
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数将数组的内容组合成一个字符串,参数 glue 是字之间的分隔符号。
使用范例
<?
$colon_separated = implode(“:”, $array);
echo $colon_separated;
?>
参考: explode() join() split()

join
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数是 implode 函数的别名。

ltrim
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数用来删去字符串中的连续空白带 (whitespace)。

md5
语法: string md5(string str);
返回值: 字符串
函数种类: 编码处理
内容说明: 本函数用来计算 MD5 哈稀。关于 MD5 编码法,可以参考 RSA Data Security, Inc. MD5 Message-Digest Algorithm. RFC1321;或是赖溪松、韩亮、张真诚等合着之近代密码学及其应用,11.3。

nl2br
语法: string nl2br(string string);
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数将换行字符转换成 HTML 换行的 <br> 指令。
参考: htmlspecialchars() htmlentities()

ord
返回值: 整数
函数种类: 资料处理
内容说明: 本函数返回字符的 ASCII (美国国家标准交换码) 序数值。本函数和 chr() 函数相反。
使用范例
<?php
if (ord($str) == 10) {
echo(“字符串 \$str 的第一个字是换行字符。\n”);
}
?>
参考: chr()

parse_str
语法: void parse_str(string str);
返回值: 无
函数种类: 资料处理
内容说明: 本函数可将浏览器返回的 GET 方法的 QUERY_STRING 字符串解析。返回的变量名及值就依 QUERY_STRING 的名称及值。
使用范例
<?php
$str = “first=value&second[]=this+works&second[]=another”;
parse_str($str);
echo $first; // 显示出 “value” 字符串
echo $second[0]; // 显示 “this works” 字符串
echo $second[1]; // 显示 “another” 字符串
?>

print
返回值: 布尔值
函数种类: 资料处理
内容说明: 本函数输出字符串。若成功则返回 1,失败则返回 0。例如传输中途客户的浏览器突然挂了,则会造成输出失败的情形。
参考: echo() printf() flush()

printf
返回值: 整数
函数种类: 资料处理
内容说明: 本函数依参数 format 指定的内容格式将字符串格式化。格式的细节可以参考 sprintf()。
参考: print() sprintf() flush()

quoted_printable_decode
语法: string quoted_printable_decode(string str);
返回值: 字符串
函数种类: 编码处理
内容说明: 本函数可以将 quoted-printable 后的字符串解码成为 8 位编码的字符串。而本函数类似 imap_qprint() 函数,只一不同的地方是使用 imap_qprint() 函数需要让系统加入 IMAP 的模块,而本函数不需要 IMAP 模块。

quotemeta
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数将字符串中含有 . \\ + * ? [ ^ ] ( $ ) 等字符的前面加入反斜线 “\” 符号。
参考: addslashes() htmlentities() htmlspecialchars() nl2br() stripslashes()

rawurldecode
语法: string rawurldecode(string str);
返回值: 字符串
函数种类: 编码处理
内容说明: 本函数将字符串解码。从 URL 的字符串专用格式解成普通字符串。详细的编码解码信息及规格文件可以参考 RFC 1738。
参考: rawurlencode()

rawurlencode
语法: string rawurlencode(string str);
返回值: 字符串
函数种类: 编码处理
内容说明: 本函数将字符串编码成 URL 的字符串专用格式,特殊的字符会转换成百分比符号后面加上二个十六位数字的格式。例如,空格就会变成 %20。
使用范例
<?php
echo ‘<a href=”
ftp://guest:’, rawurlencode (‘foo @+%/’), ‘@localhost/x.txt”>’;
?>
参考: rawurldecode()

setlocale
返回值: 字符串
函数种类: 操作系统与环境
内容说明: 本函数用来配置地域的信息。参数 category 有下列的选择:
LC_ALL 包括下面的全项选项都要。
LC_COLLATE 配置字符串比较,PHP 目前尚未实作出来本项。
LC_CTYPE 配置字符类别及转换。例如全变大写 strtoupper()。
LC_MONETARY 配置金融货币,PHP 目前尚未实作。
LC_NUMERIC 配置小数点后的位数。
LC_TIME 配置时间日期格式,与 strftime() 合用。
而参数 locate 若是空字符串 “”,则会使用系统环境变量的 locate 或是 LANG 的值。若 locate 为零,则不会改变地域化配置。返回新的地域,若系统尚未实作则返回 false。
使用范例
Michal Fita <
manveru@witrynka.pl> 于 11-Jan-1999 11:01 提出这个以波兰作地域化的例子。
<?
setlocale(“LC_ALL”, “pl”);
$net = “1234,56″;
$gross = “1,22″ * $net;
printf(“毛利: %s, 净利: %s”, $gross, $net”);
/* 波兰总?/font>[值税为 22% */
?>
返回值则为
毛利: 1234,56, 净利: 1506,1632

similar_text
返回值: 整数
函数种类: 资料处理
内容说明
本函数用来计算比较二字符串的相似程度。

soundex
返回值: 字符串
函数种类: 资料处理
内容说明: Soundex 值是利用英文字的读音近似值所求得的值,值由四个字符构成,第一个字符为英文字母,后三个为数字。在拼音文字中有时会有会念但不能拼出正确字的情形,特别是在做搜寻引擎时面对用户传入的英文字符串,可用本函数做类似模糊比对的效果。例如 Knuth 和 Kant 二个字符串,它们的 soundex 值都是 H416。更详细的说明参考 Donald Knuth 大师的名著:电脑程序设计的艺术 (The Art Of Computer Programming) 第三卷排序和搜寻。
使用范例
<?
$str1=soundex(“Wilson”);
$str2=soundex(“Waillsume”);
echo “soundex(\”Wilson\”)=$str1 等于\n”;
echo “soundex(\”Waillsume\”)=$str2\n”;
echo “值均为 $str1″;
?>
上例返回的字符串为
soundex(“Wilson”)=W425 等于
soundex(“Waillsume”)=W425
值均为 W425

sprintf
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数用来将字符串格式化。参数 format 是转换的格式,以百分比符号 % 开始到转换字符为止。而在转换的格式间依序包括了
填空字符。0 的话表示空格填 0;空格是默认值,表示空格就放着。
对齐方式。默认值为向右对齐,负号表向左对齐。
字段宽度。为最小宽度。
精确度。指在小数点后的浮点数位数。
类型,见下表 % 印出百分比符号,不转换。
b 整数转成二进位。
c 整数转成对应的 ASCII 字符。
d 整数转成十进位。
f 倍精确度数字转成浮点数。
o 整数转成八进位。
s 整数转成字符串。
x 整数转成小写十六进位。
X 整数转成大写十六进位。
使用范例
<?
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// 此时变量 $money 值为 “123.1″;
$formatted = sprintf (“%01.2f”, $money);
// 此时变量 $ formatted 值为 “123.10″
?>

strchar
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数也就是 strstr() 函数。

strcmp
返回值: 整数
函数种类: 资料处理
内容说明: 本函数用来比较二字符串的大小。返回负数表示 str1 小于 str2;返回正数表示 str1 大于 str2;返回零表示二字符串相同。
参考: ereg() substr() strstr()

strcspn
返回值: 整数
函数种类: 资料处理
内容说明: 本函数用来比较二字符串并计算出不同处的字符串长度。
参考: strspn()

strip_tags
语法: string strip_tags(string str);
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数可去掉字符串中包含的任何 HTML 及 PHP 的标记字符串。若是字符串的 HTML 及 PHP 标签原来就有错,例如少了大于的符号,则也会返回错误。而本函数和 fgetss() 有着相同的功能。

stripslashes
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数可去掉字符串中的反斜线字符。若是连续二个反斜线,则去掉一个,留下一个。若只有一个反斜线,就直接去掉。
参考: addslashes()

strlen
返回值: 整数
函数种类: 资料处理
内容说明: 本函数返回指定的字符串长度。

strrpos
返回值: 整数
函数种类: 资料处理
内容说明: 本函数用来寻找字符串 haystack 中的字符 needle 最后出现的位置。值得注意的是 needle 只能是一个字符,中文字等就不适合了。若找不到指定的字符,则返回 false 值。
参考: strpos() strrchr() substr() strstr()

strpos
返回值: 整数
函数种类: 资料处理
内容说明: 本函数用来寻找字符串 haystack 中的字符 needle 最先出现的位置。值得注意的是 needle 只能是一个字符,中文字等就不适合了。若找不到指定的字符,则返回 false 值。参数 offset 可省略,用来Y表示从 offset 开始找。
参考: strrpos() strrchr() substr() strstr()

strrchr
返回值: 整数
函数种类: 资料处理
内容说明: 本函数用来寻找字符串 haystack 中的字符 needle 最后出现位置,并将此位置起至字符串 haystack 结束之间的字符串返回。若没有找到 needle 则返回 false。
使用范例
下例取回环境变量 PATH 之最后一个路径
<?php
$dir = substr( strrchr( $PATH, “:” ), 1 );
echo “最后的路径为: “.$dir;
?>
参考: substr() strstr()

strrev
返回值: 字符串
函数种类: 资料处理
内容说明: 将字符串前后颠倒。
使用范例
下例的返回字符串为 “gneP nosliW”
<?
$str=strrev(“Wilson Peng”);
echo $str;
?>

strspn
返回值: 整数
函数种类: 资料处理
内容说明: 本函数将 str2 字符串当遮罩,可用来计算 str1 字符串中有几个字符落在 str2 遮罩中。
参考: strcspn()

strstr
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数将 needle 最先出现在 haystack 处起至 haystack 结束的字符串返回。若找不到 needle 则返回 false。
参考: strrchr() substr() ereg()

strtok
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数将字符串 arg1 依字符串 arg2 的值切开成小段小段的字符串。
使用范例: 本例将 I will be back 字符串依空白切开。
<?php
$string = “I will be back”;
$tok = strtok($string,” “);
while($tok) {
echo “单字=$tok<br>”;
$tok = strtok(” “);
}
?>
参考: split() explode()

strtolower
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数将字符串 str 全部变小写字符串。
参考: strtoupper() ucfirst()

strtouper
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数将字符串 str 全部变大写字符串。
参考: strtolower() ucfirst()

str_replace
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数将字符串 str 代入 haystack 字符串中,将所有的 needle 置换成 str。
mlevine@adtraq.com (11-Apr-1999) 指出在 PHP 3.0.7 版,本函数有些 bug,而 nadeem@bleh.org (05-Jun-1999) 补充在 PHP 3.0.8 版本函数就回复正常了。
使用范例
下例将 %body% 以 black 取代
<?php
$bodytag = str_replace(“%body%”, “black”, “<body text=%body%>”);
echo $bodytag;
?>
参考: ereg_replace()

strtr
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数将字符串 str 中和 from 有关的字符一一转成 to 的字符。
参考: ereg_replace()

substr
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数将字符串 string 的第 start 位起的字符串取出 length 个字符。若 start 为负数,则从字符串尾端算起。若可省略的参数 length 存在,但为负数,则表示取到倒数第 length 个字符。
使用范例
<?
echo substr(“abcdef”, 1, 3); // 返回 “bcd”
echo substr(“abcdef”, -2); // 返回 “ef”
echo substr(“abcdef”, -3, 1); // 返回 “d”
echo substr(“abcdef”, 1, -1); // 返回 “bcde”
?>
参考: strrchr() ereg()

trim
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数返回字符串 string 首尾的空白字符去除后的字符串。
参考: chop() ltrim()

ucfirst
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数返回字符串 str 第一个字的字首字母改成大写。
参考: strtoupper() strtolower()

ucwords
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数返回字符串 str 每个字的字首字母全都改成大写。

原帖

posted under PHP | No Comments »

关于MySQL中limit的一些变化

二月13

今天终于把分页问题解决了,但是关于limit的变化还是非常郁闷的.

事情是这样D: 我记得以前用select语句时候加上limit 0,3的意思是显示第0条到第3条记录,也就是会显示0,1,2,3一共四条几录.  而现在用同样的语句只显示3条,而却不单单3条那么简单,如果改成1,3,还是显示3条只不过是1开始后的3条.

无限迷茫了1个星期,今天终于灵光一闪原来limit后的数字的意义改变了. 新的limit后2个数字意思是 “从第几条开始”,”显示几条”. 也就是说,如果是0,3,那么新的litmit的意思是,从第0条记录开始,显示3条记录, 同样的1,3的意思是从第1条记录开始显示3条(这里的第一条记录实际指的是第二条,因为从0数起.)

对于新的limit我的感觉是确实变方便了,当然如果不知道怎么运作的会和我一样非常迷茫和郁闷, 但是了解了以后其实这个改动是非常方便的. 最明显的就是做分页的时候, 以前还要用公式去计算当前页的起始号码然后再去算终结号码. 现在么很简单, 原来起始位置用当前页-1,原来的终结位置直接填上每页显示条数就可以了,搞定.

过几天整理一下自己写的分页然后发上来分享吧.

posted under PHP | No Comments »

PHP字符串剪辑substr()的一些小技巧.

二月13

在PHP中要剪辑一段字符串有很多方法,最简单的就是substr()了

在手册里的用法为:

substr

(PHP 3, PHP 4, PHP 5)   

substr – Return part of a string

   

Description

string substr ( string string, int start [, int length] )

substr() returns the portion of string specified by the start and length parameters.

If start is non-negative, the returned string will start at the start‘th position in string, counting from zero. For instance, in the string ‘abcdef‘, the character at position 0 is ‘a‘, the character at position 2 is ‘c‘, and so forth.

 

很简单substr(“字符串内容(可以是一个变量)”,开始,结束)

这里说一下开始是从0开始,也就是如果字符串是12345,开始写0结束写4那么就输出12345,如果从1开始就是2345.

这里一个技巧, 如果你要删除最后一个或几个字符怎么办呢? 比较”笨”的做法是算出这个字符串一共多少个字然后在用0到总字符数-1. 这里有更快更简单的方法.substr(‘12345a’,0,-1)这样输出的是12345,对了就是那么简单.  -1等于总字符减去1. 同样的如果要删除后4个字符那么用0到-4就可以了.

posted under PHP | No Comments »