wordpress首页截断出现乱码的解决办法
发表时间:2010-11-22 评论:0 点击 2,810+
这种乱码现象一般是出现在正文截断的时候,因为Wordpress模板的字符集是UTF-8,它对于英文来说是一个字母一个字节(8位)来编码 英文截断不会出现乱码,而中文却是一个汉字三个字节(24位)来编码计算 这样难免会出现乱码问题。所以截断的函数只会判断在多少字节的地方去截,如果到了那个地方一个汉字只显示了三分之一或者三分之二的时候,那个汉字就不能完整显示,而函数又不能很智能的多截一个字节或者少截一个,怎么办?于是就产生了乱码。(有时汉字刚好就那么多个字节就不会出现乱码,遇巧的事没有那么多!)这个问题在很多有类似功能的模板上都会出现,这不是数据库的错,也不是字符集的问题,只是因为制作者在编写模板的时候并没有考虑到中文字符可能产生的问题。
如图是不是有乱码:
第一步
将以下函数写进主题所附带的functions.php文件中;
//截断函数开始
function Limit_Char($max_char = 200, $more_text = '...', $more_link_text = '', $limit_type = 'content') {
if ($limit_type == 'title') { $limiter = get_the_title(); }
else { $limiter = get_the_content(); }
$limiter = apply_filters('the_content', $limiter);
$limiter = strip_tags(str_replace(']]>', ']]>', $limiter));
if (strlen($limiter) > $max_char) {
$limiter = substr($limiter, 0, $max_char+1);
$limiter = utf8_conver($limiter);
echo $limiter;
echo $more_text;
if ($more_link_text != '') {
echo ' <a href="';
echo the_permalink();
echo '">'.$more_link_text.'</a>';
}
} else {
echo $limiter;
}
}
function utf8_conver($str) {
$len = strlen($str);
for ($i=strlen($str)-1; $i>=0; $i-=1){
$hex .= ' '.ord($str[$i]);
$ch = ord($str[$i]);
if (($ch & 128)==0) return(substr($str,0,$i));
if (($ch & 192)==192) return(substr($str,0,$i));
}
return($str.$hex);
}
//截断函数结束
第二步
把模板文件中index.php、Archive.php等中用到截断的地方的函数替换成如下;
例如我的主题是如下位置(不同主题可能不一样):
Index.php中:
<div class="post_entry">
<?php echo mb_strimwidth(strip_tags(apply_filters('the_content', $post->post_content)), 0, 500,"..."); ?>
(这段代码应该不会出现乱码的我也不是很明白)
<div class="clear"></div>
Archive.php中
<div class="archive">
<?php echo mb_strimwidth(strip_tags(apply_filters('the_content', $post->post_content)), 0, 500,"..."); ?>
</div>
<div class="clear"></div>
以上都替换为:
<?php Limit_Char(500); ?>
<!-- 500是你需要截断多少字节的长度,根据实际情况修改。-->
现在好了乱码彻底解决,不信试试看!