如果在用CSS设计布局时遇到BUG,请认真阅读以下内容,非常容易记忆的,不知道哪位高人把CSS BUG编成了顺口溜了!看看好不好记住呢?

  1. IE边框若显若无,须注意,定是高度设置已忘记
  2. 浮动产生有缘故,若要父层包含住,紧跟浮动要清除,容器自然显其中
  3. 三像素文本慢移不必慌,高度设置帮你忙
  4. 兼容各个浏览须注意,默认设置行高可能是杀手
  5. 独立清除浮动须铭记,行高设无,高设零,设计效果兼浏览
  6. 学布局须思路,路随布局原理自然直,轻松驾驭html,流水布局少hack,代码清爽,兼容好,友好引擎喜欢迎。
  7. 所有标签皆有源,只是默认各不同,span是无极,无极生两仪—内联和块级,img较特殊,但也遵法理,其他只是改造各不同,一个*号全归原,层叠样式理须多练习,万物皆规律。
  8. 图片链接排版须小心,图片链接文字链接若对齐,padding和vertical-align:middle要设定,虽差微细倒无妨。
  9. IE浮动双边距,请用display:inline拘。
  10. 列表横向排版,列表代码须紧靠,空隙自消须铭记。 (转自php100)

编程时间长了,大家见过很多函数功能吧,比如获取用户IP等等,现在我将常用的PHP函数做个总结,方便大家COPY和使用。

's','o'=>'t','l'=>'xx');
//echo strsReplace('hello',$arrayName);
function strsReplace($str, $replaces)
{
	$subject=$str;
    foreach ($replaces as $k => $v)
        $subject = str_replace($k, $v, $subject);
    return $subject;
}

//规范文件名
//$filename='"<>/\\\asda/.,psd|"';
//echo tripFilename($filename);
function tripFilename($filename)
{
	//$s=array("/","\\","?","*","<",">",'"',"|",",","'");//使用时请删除屏蔽
    return str_replace($s,"",$filename);
}

//PHP判断数组维度  
//$arr=array('yiyi'=>1212,'haha'=>array('heihei'=>array(array("a")),"b"));
//echo getMaxDim($arr);
function getMaxDim($vDim)
{
    if (!is_array($vDim))
        return 0;
    else {
        $max1 = 0;
        foreach ($vDim as $item1) {
            $t1 = getMaxDim($item1);
            if ($t1 > $max1)
                $max1 = $t1;
        }
        return $max1 + 1;
    }
}

//给数字加小数点,默认格式为452.00
//echo fee(452);
function fee($fee, $size = 2)
{
    $fee = trim($fee);
    if (empty($fee))
        return '0.00';
    if (!is_numeric($fee))
        return 'err';
    return number_format($fee, $size, '.', '');
}

//获取随机序列(注:实测数字最好9位一下)
//echo random(9,1);
//echo random(25);
function random($length, $numeric = 0)
{
    PHP_VERSION < '4.2.0' && mt_srand((double) microtime() * 100000000000);
    if ($numeric) {
        $hash = sprintf('%0' . $length . 'd', mt_rand(0, pow(10, $length) - 1));
    } else {
        $hash  = '';
        $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
        $max   = strlen($chars) - 1;
        for ($i = 0; $i < $length; $i++) {
            $hash .= $chars[mt_rand(0, $max)];
        }
    }
    return $hash;
}

//错误提醒
function alertBack($msg = "")
{
    $html = "
		           ";
    echo $html;
    exit();
}

//提醒跳转
function alertGoto($url, $msg)
{
    $html = "
		           ";
    echo $html;
    exit();
}

//建立文件夹
function createDir($path)
{
    if (!file_exists($path)) {
        createDir(dirname($path));
        mkdir($path);
    }
}

//删除文件夹
function deleteDir($dir)
{
    $dh = opendir($dir);
    while ($file = readdir($dh))
        if ($file != "." && $file != "..") {
            $fullpath = $dir . "/" . $file;
            if (!is_dir($fullpath))
                unlink($fullpath);
            else
                deleteDir($fullpath);
        }
    closedir($dh);
    if (rmdir($dir))
        return true;
    else
        return false;
}

//获取扩展名
function getFileType($filename)
{
    if (substr_count($filename, ".") == 0) { // 检查文件名中是否有.号。 
        return; // 返回空
    } else if (substr($filename, -1) == ".") { // 检查是否以.结尾,即无扩展名 
        return; // 返回空 
    } else {
        $fileType = strrchr($filename, "."); // 从.号处切割 
        $fileType = substr($fileType, 1); // 去除.号  
        return $fileType; // 返回  
    }
}

//匹配手机号
function checkTel($tel)
{
    if (strlen($tel) != 11)
        return false;
    return preg_match('/^1(3|5|8)[0-9]{9}$/', $tel);

}

//检查EMAIL格式
function checkEmail($email)
{
    if ($email == '')
        return false;
    if (eregi("^[_\.0-9a-z]+@([0-9a-z][0-9a-z]+\.)+[a-z]{2,3}$", $email))
        return true;
    return false;

}

//SMTP发送邮件
function sendMail($mail)
{
    global $m;
    if ($m->cfg['mailMethod'] == 'mail()') {
    }
    if ($m->cfg['mailMethod'] == 'smtp') {
        include_once "lib/smtp.class.php";
        $smtpserver  = $m->cfg['smtpServer']; //您的smtp服务器的地址
        $port        = empty($m->cfg['smtpPort']) ? '25' : $m->cfg['smtpPort']; //smtp服务器的端口,一般是 25 
        $smtpuser    = $m->cfg['smtpCount']; //您登录smtp服务器的用户名
        $smtppwd     = $m->cfg['smtpPas']; //您登录smtp服务器的密码
        $mailtype    = "HTML"; //邮件的类型,可选值是 TXT 或 HTML ,TXT 表示是纯文本的邮件,HTML 表示是 html格式的邮件
        $sender      = $m->cfg['smtpCount']; //发件人,一般要与您登录smtp服务器的用户名($smtpuser)相同,否则可能会因为smtp服务器的设置导致发送失败
        $smtp        = new smtp($smtpserver, $port, true, $smtpuser, $smtppwd, $sender);
        $smtp->debug = true; //是否开启调试,只在测试程序时使用,正式使用时请将此行注释
        $send        = $smtp->sendmail($mail['to'], $sender, $mail['subject'], $mail['body'], $mailtype);
        if ($send == 1)
            return true;
        return $this->smtp->logs;
    }
}

//检查身份证有效性
function checkId($id_card)
{
    if (strlen($id_card) == 18) {
        return idcard_checksum18($id_card);
    } elseif ((strlen($id_card) == 15)) {
        $id_card = idcard_15to18($id_card);
        return idcard_checksum18($id_card);
    } else {
        return false;
    }
}
// 计算身份证校验码,根据国家标准GB 11643-1999 
function idcard_verify_number($idcard_base)
{
    if (strlen($idcard_base) != 17) {
        return false;
    }
    //加权因子 
    $factor             = array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
    //校验码对应值 
    $verify_number_list = array('1','0','X','9','8','7','6','5','4','3','2');
    $checksum           = 0;
    for ($i = 0; $i < strlen($idcard_base); $i++) {
        $checksum += substr($idcard_base, $i, 1) * $factor[$i];
    }
    $mod           = $checksum % 11;
    $verify_number = $verify_number_list[$mod];
    return $verify_number;
}
// 将15位身份证升级到18位 
function idcard_15to18($idcard)
{
    if (strlen($idcard) != 15) {
        return false;
    } else {
        // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码 
        if (array_search(substr($idcard, 12, 3), array(
            '996',
            '997',
            '998',
            '999'
        )) !== false) {
            $idcard = substr($idcard, 0, 6) . '18' . substr($idcard, 6, 9);
        } else {
            $idcard = substr($idcard, 0, 6) . '19' . substr($idcard, 6, 9);
        }
    }
    $idcard = $idcard . idcard_verify_number($idcard);
    return $idcard;
}
// 18位身份证校验码有效性检查 
function idcard_checksum18($idcard)
{
    if (strlen($idcard) != 18) {
        return false;
    }
    $idcard_base = substr($idcard, 0, 17);
    if (idcard_verify_number($idcard_base) != strtoupper(substr($idcard, 17, 1))) {
        return false;
    } else {
        return true;
    }
}

//获取星期
//echo getWeek('2013-09-02');
function getWeek($day)
{
    $days = array('周日','周一','周二','周三','周四','周五','周六');
    $day  = explode('-', $day);
    return $days[date('w', mktime(0, 0, 0, $day[1], $day[2], $day[0]))];
}

?>

运行SQL一定要备份,以防万一!

先来看看每个表的功能吧

wp_commentmeta:存储评论的元数据 wp_comments:存储评论 wp_links:存储友情链接(Blogroll) wp_options:存储WordPress系统选项和插件、主题配置 wp_postmeta:存储文章(包括页面、上传文件、修订)的元数据 wp_posts:存储文章(包括页面、上传文件、修订) wp_terms:存储每个目录、标签 wp_term_relationships:存储每个文章、链接和对应分类的关系 wp_term_taxonomy:存储每个目录、标签所对应的分类 wp_usermeta:存储用户的元数据 wp_users:存储用户信息

删除残留垃圾数据

使用WordPress经常换主题删主题,装插件删插件很正常,但是简单的删除并不彻底,数据库会有残留,多余的数据保留在post_meta表格里,久而久之就成了一堆可观的垃圾。可使用下面的SQL语句来清除不需要的postmeta值。有益于加快数据库运行速度,减小数据。 执行SQL语句

DELETE FROM wp_postmeta WHERE meta_key = '_edit_lock';
DELETE FROM wp_postmeta WHERE meta_key = '_edit_last';

删除草稿修订版本

在WordPress后台中编辑文章时,系统会自动保存许多修订的副本。过多的修订记录会加重数据库的负担并造成了资源的浪费。数据库越来越庞大,增加了数据检索影响页面的加载时间。 执行SQL语句

DELETE a,b,c FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision'

注意:此方法将删除所有的文章的所有修订版,包括相关的meta数据。

处理未使用的标签

在WordPress数据库中,如果你使用一个查询语句手动来删除旧的文章,旧的标签却仍然会保留并在你的标签云/列表中出现。你可以使用下面的方法识别未使用的标签并将它删除。 执行SQL语句

SELECT * FROM wp_terms wt
INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id
INNER JOIN wp_term_relationships wtr ON wtr.term_taxonomy_id=wtt.term_taxonomy_id
LEFT JOIN wp_posts wp ON wp.ID=wtr.object_id
WHERE taxonomy='post_tag'
AND ID IS null
AND NOT EXISTS(SELECT * From wp_terms wt2
INNER JOIN wp_term_taxonomy wtt2 ON wt2.term_id=wtt2.term_id WHERE wtt2.parent=wt.term_id) ORDER BY name;

修复和优化

执行完所有的语句之后,全选所有的表,然后选择“修复表”和“优化表”。 (来源于互联网)

抽空写了个这。。。虽然很头大,但是还是写完了。 下面由我来翻译下面这一大段话,首先,函数使用了PINYIN函数,将栏目名称转化成英文缩写,剩下的工作就是拼接和查询了,其实原理很简单。

阅读剩余部分

找到网站个目录下文件夹:wp-include文件夹下的class-wp.php,定位此代码段(V3.6在144行)

老高温馨提示:使用本教程前请备份数据库及相关文件

if ( isset($_SERVER['PATH_INFO']) )
    $pathinfo = $_SERVER['PATH_INFO'];
else
    $pathinfo = '';
$pathinfo_array = explode('?', $pathinfo);
$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
$req_uri = $_SERVER['REQUEST_URI'];

修改为 

if ( isset($_SERVER['PATH_INFO']) )
    $pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], "UTF-8", "GBK");
else
    $pathinfo = '';
$pathinfo_array = explode('?', $pathinfo);
$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], "UTF-8", "GBK");

至此,wordpress已经学会读中文了。

还有一种解决方式,即给每一个标签都设置一个英文别名,这样设置的标签还是不能使用中文,可以使用下面的代码将所有的标签格式化:

';

    mysql_select_db(MYSQL_DATABASE, $link);

    // 下面三句的作用是设置当前连接编码为UTF-8标准。
    // 所以请确保你的WordPress数据库是符合UTF-8编码标准,
    // 否则请自行将下面的UTF-8改成相应的字符集。
    mysql_set_charset('utf8', $link);
    mysql_query('SET NAMES UTF8');
    mysql_query("SET character_set_results = 'utf8', " . "character_set_client = 'utf8', " . "character_set_connection = 'utf8', " . "character_set_database = 'utf8', " . "character_set_server = 'utf8'", $link);
    // 字符设置结束
    echo '
'; // 下面为encode编码tag中的中文slug $res = mysql_query("SELECT `term_id`,`name` FROM " . MYSQL_TABLEPRE . "terms"); //echo "SELECT `term_id`,`slug` FROM ".MYSQL_TABLEPRE."terms"; while ($row = mysql_fetch_array($res)) { echo 'id=' . $row[0] . ' - ' . 'name=' . $row[1] . ' --- '; if (mysql_query('UPDATE `' . MYSQL_TABLEPRE . 'terms` SET `slug`=\'' . urlencode($row[1]) . '\' WHERE `term_id` =' . $row[0])) { echo 'UPDATED!
'; } } // 编码结束 mysql_close($link); echo '完成!
'; exit(); ?>

程序员在找Bug 中!

在找Bug

程序员找到Bug了!!

找到BUG

最后,程序员修好了这个Bug 以为可以下班去吃饭了的时候~~~

苦逼的程序员

终于,程序员收到了加班通知

苦逼的程序员

看过百度百科的同学都知道,如果百科文章比较长,那么他会生成一个目录,不仅增强了用户体验,还为文章引入了锚点内链,对SEO优化起到了十分积极的作用。

请不要以为这个功能很复杂,其实目录功能只是牵扯到一个正则,一个JS和一个CSS而已,对于我们wordpress来说,很多插件已经实现了此功能。

老高@PHPer使用的是一款名叫Content Index for WordPress的国人自制插件,功能强大,使用方便。

Content Index for WordPress

安装

wordpress内置的插件管理器搜索"Content Index for WordPress",安装即可。

使用

安装后请至wordpress后台->设置->文章内索引: 老高@PHPer使用如下配置:

配置

开启

插件默认对所有文章关闭,如果你想在某一篇文章中使用目录,请在编辑日志页面勾选

在此文章/页面中开启

Tips

也许你已经发现了,PHPer@老高使用了锚点之间的平滑滚动,如果你也希望实现此效果,请将下面的代码引入你的文章模板中

$(document).ready(function() {
    $('a[href*=#]').click(function() {
        if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
            var $target = $(this.hash);
            $target = $target.length && $target || $('[name=' + this.hash.slice(1) + ']');
            if ($target.length) {
                var targetOffset = $target.offset().top;
                $('html,body').animate({
                    scrollTop: targetOffset
                },
                1000);
                return false;
            }
        }
    });
});

注意 可能你还没发现,上面的代码会出现一些小问题,比如你的网站留言也会出现某些锚点,点击它们将会出现很多意想不到的效果,所以我们需要将锚点控制在目录范围内 因此,我们需要在第二行的Jquery代码做一些修改

$('a[href*=#]').click(function()

改为

$('#content-index-contents a[href*=#]').click(function() {

再次注意

经测试发现,如果你的标签中出现如,(半角逗号).(半角逗号)和空格的话,平滑滚动会失效。 所以可能需要将,(半角逗号).(半角逗号)和空格替换为全角标点或者英文的下划线即可。

另一款插件名叫TOC+,也很简单好用,请百度之!