WordPress 基本自带的函数都是直接输出文章标题长度的,有些标题太长了就会自动换行,解决办法一种是使用mbstring函数库来解决,这样就可以指定具体标题字数,另一种也可以通过CSS的方式控制,这里我们只谈使用函数来控制。在 WordPress 里,我们使用
the_title();
来输出文章标题,与其相关的还有一个函数:
get_the_title();
简单的说说两者的关系,get_the_title() 返回值是一个字符串(文章标题),而 the_title() 就是该字符串通过 echo 输出后的值。
实际上就是 WordPress 自己在输出文章标题时进行了简化,直接用
the_title();
代替了
echo get_the_title();
除此之外这里还需要用到另外一个函数:mb_strimwidth(string str, int start, int width, [string trimmarker], [string encoding]);mb_strimwidth() truncates string str to specified width. It returns truncated string.If trimmarker is set, trimmarker is appended to return value.start is start position offset. Number of characters from the beginning of string. (First character is 0)trimmarker is string that is added to the end of string when string is truncated.encoding is character encoding. If it is omitted, internal encoding is used.
现在大部分的 PHP 服务器都支持了 MB 库(mbstring 库 全称是 Multi-Byte String 即各种语言都有自己的编码,他们的字节数是不一样的,目前php内部的编码只支持ISO-8859-*, EUC-JP, UTF-8 其他的编码的语言是没办法在 php 程序上正确显示的。解决的方法就是通过 php 的 mbstring 函数库来解决),所以我们可以放心的使用这个用于控制字符串长度的函数:
echo mb_strimwidth(get_the_title(), 0, 38, ‘…’);
那么我们只需要用上面这个函数替换 WordPress 原有的
the_title();
即可,这里我输出了字符串的第0位到第38位,根据主题的不同可以自行设置该数值,另外多余长度部分使用“…” 代替。
其实我在控制文章摘要的时候也是使用的这个函数,比如我在 ppcnnet 主题的首页里使用的就是
echo mb_strimwidth(strip_tags(apply_filters(‘the_content’, $post->post_content)), 0, 285,”……”);
来输出285个字符长度的摘要,并过滤了 HTML 标记。
虽然这是个很简单的方法,但我相信它对主题制作者而言还是相当实用的。
一:[\x81-\xfe]格式的正则:
$s=preg_replace('/^([\x81-\xfe][\x40-\xfe])*/','0',$neirong); 这里面的大多是日韩文字
二:x{4e00}格式的正则:
preg_match("/^[\x{4e00}-\x{9fa5}]{1,4}/u",$str); 这里面是匹配中文;
——————————————————————————
这些字符集尤其是日文字符集的各种字、标点以及特殊符号的时候有所帮助。
UTF8
[\x01-\x7f]|[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}
UTF16
[\x00-\xd7][\xe0-\xff]|[\xd8-\xdf][\x00-\xff]{2}
JIS
[\x20-\x7e]|[\x21-\x5f]|[\x21-\x7e]{2}
SJIS
[\x20-\x7e]|[\xa1-\xdf]|([\x81-\x9f]|[\xe0-\xef])([\x40-\x7e]|[\x80-\xfc])
EUC_JP
[\x20-\x7e]|\x81[\xa1-\xdf]|[\xa1-\xfe][\xa1-\xfe]|\x8f[\xa1-\xfe]{2}
EUC_JP标点符号及特殊字符
[\xa1-\xa2][\xa0-\xfe]
EUC_JP全角数字
\xa3[\xb0-\xb9]
EUC_JP全角大写英文
\xa3[\xc1-\xda]
EUC_JP全角小写英文
\xa3[\xe1-\xfa]
EUC_JP全角平假名
\xa4[\xa1-\xf3]
EUC_JP全角片假名 [color=Red]2007-03-12 15:00更新[/color]
\xa3[\xb0-\xb9]|\xa3[\xc1-\xda]|\xa5[\xa1-\xf6][\xa3][\xb0-\xfa]|[\xa1][\xbc-\xbe]|[\xa1][\xdd]
EUC_JP全角汉字 [color=Red]2007-03-12 15:06更新[/color]
[\xb0-\xcf][\xa0-\xd3]|[\xd0-\xf4][\xa0-\xfe]|[\xB0-\xF3][\xA1-\xFE]|[\xF4][\xA1-\xA6]|[\xA4][\xA1-\xF3]|[\xA5][\xA1-\xF6]|[\xA1][\xBC-\xBE]
Big5
[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|[\xa1-\xfe])
GBK
[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]
GB2312汉字
[\xb0-\xf7][\xa0-\xfe]
GB2312半角标点符号及特殊符号
\xa1[\xa2-\xfe]
GB2312罗马数组及项目序号
\xa2([\xa1-\xaa]|[\xb1-\xbf]|[\xc0-\xdf]|[\xe0-\xe2]|[\xe5-\xee]|[\xf1-\xfc])
GB2312全角标点及全角字母
\xa3[\xa1-\xfe]
GB2312日文平假名
\xa4[\xa1-\xf3]
GB2312日文片假名
\xa5[\xa1-\xf6]
补充:
GB18030
[\x00-\x7f]|[\x81-\xfe][\x40-\xfe]|[\x81-\xfe][\x30-\x39][\x81-\xfe][\x30-\x39]
[color=Red]2007-03-12 21:35 补充[/color]
日文半角空格
\x20
SJIS全角空格
(?:\x81\x81)
SJIS全角数字
(?:\x82[\x4f-\x58])
SJIS全角大写英文
(?:\x82[\x60-\x79])
SJIS全角小写英文
(?:\x82[\x81-\x9a])
SJIS全角平假名
(?:\x82[\x9f-\xf1])
SJIS全角平假名扩展
(?:\x82[\x9f-\xf1]|\x81[\x4a\x4b\x54\x55])
SJIS全角片假名
(?:\x83[\x40-\x96])
SJIS全角片假名扩展
(?:\x83[\x40-\x96]|\x81[\x45\x5b\x52\x53])
EUC_JP全角空格
(?:\xa1\xa1)
EUC半角片假名
(?:\x8e[\xa6-\xdf])
——————————————————————————
下面是utf-8编码的例子:
$str = "汉字";
if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str)) {
print("该字符串全部是中文");
} else {
print("该字符串不全部是中文");
}
下面的例子包含gbk,gb2312的例子:
<?php
$action = trim($_GET['action']);
if($action == "sub")
{
$str = $_POST['dir'];
//if(!preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str)) //GB2312汉字字母数字下划线正则表达式
if(!preg_match("/^[\x{4e00}-\x{9fa5}A-Za-z0-9_]+$/u",$str)) //UTF-8汉字字母数字下划线正则表达式
{
echo "<font color=red>您输入的[".$str."]含有违法字符</font>";
}
else
{
echo "<font color=green>您输入的[".$str."]完全合法,通过!</font>";
}
}
?>