wordpress中文截斷產生亂碼解決方法
發(fā)布時間:2011-03-16 22:37:37 作者:佚名
我要評論
wordpress的海量模板是它的亮點之一,國內眾多高手設計的模板已經非常漂亮。
可是殘酷的現實是大部分的模板都還是出于老外之手,老外在做模板的時候一般只會考慮到顯示正常即可,而我們如果用中文來寫博客畢竟和英文環(huán)境有所差別,這樣可能會出現很多的問題,比如字體大小,亂碼,這些都要手動調整。
話說調整CSS很多人都已經是輕車熟路了,本文不討論。
不過可能大家會遇到類似下圖的現象:
產生亂碼的原因
這種亂碼現象一般是出現在正文截斷的時候,因為Wordpress模板的字符集是UTF-8,它對于英文來說是一個字母一個字節(jié)(8位)來編碼,而中文卻是一個漢字三個字節(jié)(24位)來編碼。所以截斷的函數只會判斷在多少字節(jié)的地方去截,如果到了那個地方一個漢字只顯示了三分之一或者三分之二的時候,那個漢字就不能完整顯示,而函數又不能很智能的多截一個字節(jié)或者少截一個,怎么辦?于是就產生了亂碼。這個問題相信在很多有類似功能的國外模板上都會出現,這不是數據庫的錯,也不是字符集的問題,只是因為制作者在編寫模板的時候并沒有考慮到中文字符可能產生的問題。
所以,我們要替換截斷的函數。簡單來說,兩步就可以搞定。
第一步
將以下兩個函數寫進主題所附帶的
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
中將截斷函數替換成新的。
<?php Limit_Char(200); ?>
<!-- 200是你需要截斷多少字節(jié)的長度,根據實際情況修改。-->
修改完成,大功告成啦。理論上用這個辦法,只要是截斷的問題都可以得到解決。
BTW:本人菜鳥一只。高手輕點拍磚。
話說調整CSS很多人都已經是輕車熟路了,本文不討論。
不過可能大家會遇到類似下圖的現象:
產生亂碼的原因
這種亂碼現象一般是出現在正文截斷的時候,因為Wordpress模板的字符集是UTF-8,它對于英文來說是一個字母一個字節(jié)(8位)來編碼,而中文卻是一個漢字三個字節(jié)(24位)來編碼。所以截斷的函數只會判斷在多少字節(jié)的地方去截,如果到了那個地方一個漢字只顯示了三分之一或者三分之二的時候,那個漢字就不能完整顯示,而函數又不能很智能的多截一個字節(jié)或者少截一個,怎么辦?于是就產生了亂碼。這個問題相信在很多有類似功能的國外模板上都會出現,這不是數據庫的錯,也不是字符集的問題,只是因為制作者在編寫模板的時候并沒有考慮到中文字符可能產生的問題。
所以,我們要替換截斷的函數。簡單來說,兩步就可以搞定。
第一步
將以下兩個函數寫進主題所附帶的
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
中將截斷函數替換成新的。
復制代碼
代碼如下:<?php Limit_Char(200); ?>
<!-- 200是你需要截斷多少字節(jié)的長度,根據實際情況修改。-->
修改完成,大功告成啦。理論上用這個辦法,只要是截斷的問題都可以得到解決。
BTW:本人菜鳥一只。高手輕點拍磚。
相關文章

CyberPanel安裝WordPress并配置偽靜態(tài)規(guī)則
下面教你如何在 CyberPanel安裝WordPress以及配置偽靜態(tài),需要的朋友可以參考下2023-12-27
這篇文章主要介紹了wordpress無法安裝更新主題插件的解決辦法,需要的朋友可以參考下2020-12-27- 發(fā)現幾條比較實用的,適合 WordPress 實用的SQL語句。于是就趕緊收集分享出來了,需要的朋友可以參考下2017-09-23
wordpress在安裝使用中出現404、403、500及502問題的分析與解決方法
wordpress是很多新手站長搭建個人博客最喜愛的程序,但是最近在使用WordPress的時候遇到了一些問題,所以想著將遇到問題總結分享出來,下面這篇文章主要給大家介紹了關于wo2017-08-11WordPress取消英文標點符號自動替換中文標點符號的優(yōu)雅方法
這篇文章主要介紹了WordPress取消英文標點符號自動替換中文標點符號的優(yōu)雅方法,需要的朋友可以參考下2017-04-04- 這篇文章主要給大家介紹了wordpress自定義上傳文件類型的方法,如WordPress默認允許上傳 .exe 后綴名的可運行文件,那么我們怎么禁止用戶在WordPress后臺發(fā)表文章時上傳 .e2016-12-19
- 大家可能發(fā)現了當實現了前端用戶中心,后臺控制面板就失去了作用,那么限制其他用戶進入后臺控制面板就很有必要了!那么我們要怎么做呢?通過下面這篇文章分享的方法后,只2016-12-19
WordPress實現回復文章評論后發(fā)送郵件通知的功能
這篇文章主要介紹了WordPress實現回復文章評論后發(fā)送郵件通知的功能,涉及wordpress針對評論與郵件的相關操作技巧,需要的朋友可以參考下2016-10-11- 這篇文章主要介紹了WordPress使用自定義文章類型實現任意模板的方法,可通過自定義文章類型來實現任意模版的使用,具有一定參考借鑒價值,需要的朋友可以參考下2016-10-11
WordPress后臺地址被改導致無法登陸后臺的簡單解決方法
這篇文章主要介紹了WordPress后臺地址被改導致無法登陸后臺的簡單解決方法,簡單分析了后臺無法登陸的原因與相應的解決方法,涉及針對wordpress配置項的簡單修改,需要的朋友2016-10-11


