在使用Google网站管理工具的时候,查看HTML 建议,发现有”短的元说明“的提示,虽然不是什么错误不妨大碍,但dream始终看着不舒服- -!!,既然说元说明长度不够(即meta的Description),那么我们就给凑够字数吧。先说明一下,下面的代码适用是基于php,当然也适用于wordpress.你仍然可以根据原思路稍微修改也能让ASP摆脱”短的元说明”的困扰.同样,你也可以根据这思路应用到其它如:重复的元说明,重复的Title标记,长的元说明.
之前本站的description用的动态说明,根据不同页面显示不同的description,具体请看《动态显示meta/根据不同页面显示相应的meta》,在文章页面用的是文章的标题作为description,也难怪会出现元说明太短的提示。那么给它加上文章摘要吧,如果文章没有摘要就从文章开始部分截取100个字(这里指的是中文,不是字节,一个中文=2字节,一个英文=1字节)。PHP的截取字符串用到的是substr函数,不过我们还是要处理一下,因为该函数可不会区分中文或者英文输入,就是说你截取出来的字符串可能会出现筹码的情况,所以我们要先自行处理一下字符串的截取问题。
function subStrings($strs, $strLength, $startIndex = 0, $strCode = ‘UTF-8’) {
if($strCode == ‘UTF-8’)
{
$pa = “/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/”;
preg_match_all($pa, $strs, $t_string);if(count($t_string[0]) – $startIndex > $strLength) return join(”, array_slice($t_string[0], $startIndex, $strLength)).”…”;
return join(”, array_slice($t_string[0], $startIndex, $strLength));
}
else
{
$startIndex = $startIndex*2;
$strLength = $strLength*2;
$strlen = strlen($strs);
$tmpstr = ”;for($i=0; $i< $strlen; $i )
{
if($i>=$startIndex && $i< $startIndex && $i<$strLength)
{
if(ord(substr($strs, $i, 1))>129)
{
$tmpstr.= substr($strs, $i, 2);
}
else
{
$tmpstr.= substr($strs, $i, 1);
}
}
if(ord(substr($strs, $i, 1))>129) $i ;
}
if(strlen($tmpstr)< $strlen ) $tmpstr.= “…”;
return $tmpstr;
} }
那么Description的实现就是:
$description_title =$post->post_title ; if ($post->post_excerpt)
{
$description_excerpt= $post->post_excerpt;
//$description_excerpt=subStrings(strip_tags($post->post_content),100,0,’UTF-8′);}
else
{
//$description_excerpt = substr(strip_tags($post->post_content),0,100);
$description_excerpt = subStrings(strip_tags($post->post_content),100,0,’UTF-8′);
}$description=$description_title . $description_excerpt;
OK,问题解决!以上代码在wordpress2.8测试通过,其它版本应该也没问题。
顺便回顾一下用到的几个函数说明。
substr:截取字符串。但需要自行处理字符串的中文英文混合问题。
strip_tags:去除字符串中的HTML和PHP标记,如<p><title>等。
如果你不知道在哪加入这些代码请看:
学习了!
学习了,最近正发愁呢
其实要想截断文章内容作为description,完全不必重新写这么长的一个函数subStrings,还要兼顾UTF-8、GB2312编码问题,
直接使用substr(),中文可能会乱码,可以使用PHP内置函数 mb_strimwidth() :
$description_excerpt = mb_strimwidth(strip_tags(apply_filters(‘the_content’, $post->post_content)), 0, 100,”…”);
多谢指教,可以试试。。。不过好像mb_strimwidth截取的宽度必须是偶数,否则可能会出现乱码。
谢谢分享
网页设计也包括啊。