strpos返回值为0和返回值为false是有差别的

PHP中可以实现字符串对比的函数有很多,这里主要说说strpos()函数。
PHP手册对strpos()的描述:

定义和用法

strpos() 函数返回字符串在另一个字符串中第一次出现的位置。

如果没有找到该字符串,则返回false。

语法

strpos(string,find,start)

参数 描述

string 必需。规定被搜索的字符串。

find 必需。规定要查找的字符。

start 可选。规定开始搜索的位置。

主要容易引起问题的地方在于,如果$find字符串在$string的第一位时函数会返回0,在作判断的时候如果像平时一样使用==的话,就会忽略掉第一位就像等的字符串,所以在使用strpos()函数做字符串对比的时候,需要使用===来作为逻辑运算符!

例:
01 < ?php 02 $string = '|34|65|43|25|12|54|32|'; 03 $find = '|34|'; 04 if(strpos($string,$find)===false){ 05 echo '没有找到'; 06 }else{ 07 echo '找到'; 08 } 09 echo strpos($string,$find); 10 ?>

知识补充

运算符 说明
== 等于,逻辑算符。自动转换参与运算量的数据类型
=== 恒等于,逻辑算符。不转换数据类型
< << 管道,引入自c++。将被其后标记括起来的内容视为一个字符串处理,其中的变量会被展开 << 左移,位操作算符 >> 右移,位操作算符
继续阅读

超实用的判断是否为手机客户端的代码

<?php  
//php判断客户端是否为手机  
$agent = $_SERVER['HTTP_USER_AGENT'];  
if(strpos($agent,"NetFront") || strpos($agent,"iPhone") || strpos($agent,"MIDP-2.0") || strpos($agent,"Opera Mini") || strpos($agent,"UCWEB") || strpos($agent,"Android") || strpos($agent,"Windows CE") || strpos($agent,"SymbianOS"))  
header("Location:xxxxxxxx");  
?>  

个性化的书签源码bookmark(一)

init.php

< ?php
// 初始化
// error_reporting(0);
define("ROOT", dirname(__FILE__));
define("INC_PATH", ROOT."/inc");
include_once(INC_PATH."/php-inc/src/core.php");
include_once(INC_PATH."/php-inc/src/util.php");
include_once(ROOT."/common.php");

timer::add();

if(get_magic_quotes_gpc()) {
    $_GET = stripslashes_deep($_GET);
    $_POST = stripslashes_deep($_POST);
    $_COOKIE = stripslashes_deep($_COOKIE);
}
$_REQUEST = array_merge($_GET, $_POST, $_COOKIE);

date_default_timezone_set("Asia/Shanghai");

define("PUBLIC_PATH", ROOT);
config::set(include(ROOT."/config.php"));

mysql::add_db(config::get("db"));

template::$path = config::get("template_path");
template::$cache_path = config::get("template_cache_path");

file_cache::$path = config::get("file_cache_path");

file_log::$path = config::get("file_log_path");
file_log::$mode = config::get("file_log_mode");

define("BASE_URL", config::get("base_url"));

session_start();
$mid = isset($_SESSION["mid"]) ? $_SESSION["mid"] : 0;
template::assign("mid", $mid);

if(is_post()) {
    $p_token = P("_token");
    $c_token = isset($_COOKIE["_token"]) ? $_COOKIE["_token"] : "";
    setcookie("_token", "", time()-3600, "/");
    if($p_token != $c_token || !$c_token) {
        if(is_ajax()) {
            return_json(0, "非法请求");
        } else {
            alert("非法请求", get_root_url());
        }
    }
}

define("UID", 1);

继续阅读

去除土豆视频广告的PHP代码

index.php

<html>
<head>

	    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
		<title>无广告播放</title>
</head>
<body>
    	<form action="result.php" method="POST">	
            <p>土豆视频播放页网址:请去掉网址最后面的.html</p>
            <input type="text" name="urlOfTuDou" style="height:51px;width:449px" />
			<p><input type="submit" name = "submitOfTuDou" value="提交" /></p><br /><br /><br />
        </form>
</body>
</html>

继续阅读

12个wordpress 经典安全技巧

WordPress是一个功能强大的内容发布平台,但它始终无法完全避免黑客、垃圾信息等恶意攻击对WordPress文件的威胁。
WordPress的开源性决定了WordPress遭到恶意攻击的可能性较大,黑客们能够轻易获取该项目的源代码并寻找安全漏洞。 幸好我们还可以通过各种方式来为自己的WordPress网站添加安全防护层。 本文向大家介绍了一些用来保护WordPress网站的小技巧和修改方法,避免网站遭到恶意攻击。
1. 定期备份MySQL数据库
备份网站资料和数据库非常重要。 我们可以定期以.sql文件格式导出MySQL数据,进行备份,把导出的文件保存到安全的地方。
推荐每天备份一次数据库。即使我们不常更新网站,但也可能随时收到用户评论和引用通告。 但手动备份实在有些无聊,而且有时我们还可能忘记备份, 这时就可以利用插件进行自动备份了。
这里介绍一款 WordPress Database Backup自动备份插件, 用户可以选择 WordPress Database Backup提供的备份周期(包括每小时、每天、每星期、每
月等周期)进行资料备份。 备份过后即使数据库被破坏,我们也可以用备份资料来还原数据库。 目前市面上有很多数据库自动备份工具,我们要根据自己的需求选择合适的工具。 继续阅读

WordPress的wp-config.php源码分析

< ?php
/** 
 * WordPress 的基本配置文件
 *
 * 此文件包括如下配置信息:MySQL 数据库,数据表前缀,秘钥,语言,及绝对路径。
 *
 * @package WordPress
 */

// ** MySQL 数据库设置 - 你可以从主机服务商那里获取此信息 ** //
/** WordPress 数据库名称 */
define('WP_CACHE', true); //Added by WP-Cache Manager
define( 'WPCACHEHOME', '/home/ftp/b/blog/wwwroot/wp-content/plugins/wp-super-cache/' ); 
//Added by WP-Cache Manager
define("FS_METHOD","direct");define("FS_CHMOD_DIR",0777);define("FS_CHMOD_FILE",0777);
define('DB_NAME', 'name'); <a href="http://code.oosky.net/wp-config.html#more-5348" class="more-link">继续阅读 <span class="meta-nav">&rarr;</span>

discuz!等常见程序的伪静态

<?xml version="1.0" encoding="gb2312"?>
<configuration>
 <system.webServer>
<rewrite>
	<rules>
		<rule name="portal_topic">
			<match url="^(.*/)*topic-(.+).html?*(.*)$" />
			<action type="Rewrite" url="{R:1}/portal.php?mod=topic&amp;topic={R:2}&amp;{R:3}" />
		</rule>
		<rule name="portal_article">
			<match url="^(.*/)*article-([0-9]+)-([0-9]+).html?*(.*)$" />
			<action type="Rewrite" url="{R:1}/portal.php?mod=view&amp;aid={R:2}&amp;page={R:3}&amp;{R:4}" />
		</rule>
		<rule name="forum_forumdisplay">
			<match url="^(.*/)*forum-(w+)-([0-9]+).html?*(.*)$" />
			<action type="Rewrite" url="{R:1}/forum.php?mod=forumdisplay&amp;fid={R:2}&amp;page={R:3}&amp;{R:4}" />
		</rule>
		<rule name="forum_viewthread">
			<match url="^(.*/)*thread-([0-9]+)-([0-9]+)-([0-9]+).html?*(.*)$" />
			<action type="Rewrite" url="{R:1}/forum.php?mod=viewthread&amp;tid={R:2}&amp;extra=page%3D{R:4}&amp;page={R:3}&amp;{R:5}" />
		</rule>
		<rule name="group_group">
			<match url="^(.*/)*group-([0-9]+)-([0-9]+).html?*(.*)$" />
			<action type="Rewrite" url="{R:1}/forum.php?mod=group&amp;fid={R:2}&amp;page={R:3}&amp;{R:4}" />
		</rule>
		<rule name="home_space">
			<match url="^(.*/)*space-(username|uid)-(.+).html?*(.*)$" />
			<action type="Rewrite" url="{R:1}/home.php?mod=space&amp;{R:2}={R:3}&amp;{R:4}" />
		</rule>
		<rule name="home_blog">
			<match url="^(.*/)*blog-([0-9]+)-([0-9]+).html?*(.*)$" />
			<action type="Rewrite" url="{R:1}/home.php?mod=space&amp;uid={R:2}&amp;do=blog&amp;id={R:3}&amp;{R:4}" />
		</rule>
		<rule name="forum_archiver">
			<match url="^(.*/)*(fid|tid)-([0-9]+).html?*(.*)$" />
			<action type="Rewrite" url="{R:1}/index.php?action={R:2}&amp;value={R:3}&amp;{R:4}" />
		</rule>
		<rule name="plugin">
			<match url="^(.*/)*([a-z]+[a-z0-9_]*)-([a-z0-9_-]+).html?*(.*)$" />
			<action type="Rewrite" url="{R:1}/plugin.php?id={R:2}:{R:3}&amp;{R:4}" />
		</rule>
	</rules>
</rewrite>
 </system.webServer>
</configuration>

黑帽SEO的十大方法和对网站的危害

SEO是依据通过对长期摸索、观察得出来的技术与经验,利用搜索引擎录取网站的规则,将网站的整体结构、网站布局、关键词分布及密度进行优化,使网站对搜索引擎的抓取有友好性,从而进行搜索引擎优化,达网站到提高排名效果。由于搜索引擎的排名规则及算法是是在不断改变中的,而且这些规则和算法又是商业机密,所以不可能达到保证排在某几位的效果的。据了解,目前有很多的人打着SEO的旗号,自称可以将您的网站排在百度、Google的第几位,而做法则是运用各种SEO黑帽进行作弊的手段,使您的网站的确可以在短时间内升到很靠前的位置,但是搜索引擎是可以识别这些手段被加以惩罚的。被惩罚的网站,最严重的是您的网站在各大搜索引擎完全消失,甚至不再录取。所以希望大家谨慎分辨,不要为了一时之利,使您的网站永不见天日。
  SEO=更多页面的收录+页面文字的友好安排+转化率
  SEO分为白帽SEO和黑帽SEO,白帽SEO就是正规合理的运作,黑帽SEO就是作弊手法,下面聪少为大家介绍十种常见的作弊方法,希望大家不要用,不然会后悔的。
  1.桥页(doorway pages)
  通常是用软件自动生成大量包含关键词的网页,然后从这些网页做自动转向到主页。目的是希望这些以不同关键词为目标的桥页在搜索引擎中得到好的排名。当用户点击搜索结果的时候,会自动转到主页。有的时候是在桥页上放上一个通往主页的链接,而不自动转向。大部分情况下,这些桥页都是由软件生成的。你可以想象,生成的文字是杂乱无章,没有什么逻辑的。如果是由人写出来的真正包含关键词的文章,就不是桥页了。
  2.关键词堆砌(keyword stuffing)
  在网页中大量堆砌关键词,希望提高关键词密度,提高网页针对关键词的相关度。关键词堆砌可以在很多地方,比如在用户可以看到的文字本身中,也赡苁窃诒晏獗昵㏕itle Tag,关键词标签,说明标签中。随着搜索引擎算法的改进,关键词密度已经不是一个重要的因素。
  3.隐藏文字(hidden text) 继续阅读

PHP中的正则表达式详细教程

看实例学php正则表达式

我在一个网站工作,而这个网站最主要的内容是用户在我们的论坛输入的信息,所有这些数据在录入数据库之前都必须经过检查。我知道php3的正则表达式可以解决我的问题,但首先我不知道怎么去建立一个正则表达式。我需要一些正则表达式做例子――很明显,我第一个找的地方是php3的手册和POSIX 1002.3 规范说明,但他们举例的方式都不是很有用。除此以外,我还花了大量的时间在网上寻找关于这个主题的好文章。我最后终于知道了正则表达式的用法,大多数都是通过试验得出的,鉴于这些内容都不是很多,我决定写下了这一篇直接介绍正则表达式语法的和一个step by step建立验证货币和email的正则表达式。我希望它能够清除大家对正则表达式的困惑

正则表达式的基本语法
首先,让我们看看两个特别的字符:’^’ 和 ‘$’ 他们是分别用来匹配字符串的开始和结束,一下分别举例说明
• “^The”: 匹配以 “The”开头的字符串;
• “of despair$”: 匹配以 “of despair” 结尾的字符串;
• “^abc$”: 匹配以abc开头和以abc结尾的字符串,实际上是只有abc与之匹配
• “notice”: 匹配包含notice的字符串
你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说 模式(正则表达式) 可以出现在被检验字符串的任何地方,你没有把他锁定到两边
这里还有几个字符 ‘*’, ‘+’,和 ‘?’, 他们用来表示一个字符可以出现的次数或者顺序. 他们分别表示:”zero or more”, “one or more”, and “zero or one.” 这里是一些例子:
• “ab*”: 匹配字符串a和0个或者更多b组成的字符串(“a”, “ab”, “abbb”, etc.);
• “ab+”: 和上面一样,但最少有一个b (“ab”, “abbb”, etc.);
• “ab?”:匹配0个或者一个b;
• “a?b+$”: 匹配以一个或者0个a再加上一个以上的b结尾的字符串.
你也可以在大括号里面限制字符出现的个数,比如
• “ab{2}”: 匹配一个a后面跟两个b(一个也不能少)(“abb”);
• “ab{2,}”: 最少更两个b(“abb”, “abbbb”, etc.);
• “ab{3,5}”: 2-5个b(“abbb”, “abbbb”, or “abbbbb”).
你还要注意到你必须总是指定 (i.e, “{0,2}”, not “{,2}”).同样,你必须注意到, ‘*’, ‘+’, 和’?’ 分别和一下三个范围标注是一样的,”{0,}”, “{1,}”, 和 “{0,1}”。 继续阅读