wordpress中文截?cái)喈a(chǎn)生亂碼解決方法
發(fā)布時(shí)間:2011-03-16 22:37:37 作者:佚名
我要評(píng)論

wordpress的海量模板是它的亮點(diǎn)之一,國(guó)內(nèi)眾多高手設(shè)計(jì)的模板已經(jīng)非常漂亮。
可是殘酷的現(xiàn)實(shí)是大部分的模板都還是出于老外之手,老外在做模板的時(shí)候一般只會(huì)考慮到顯示正常即可,而我們?nèi)绻弥形膩韺懖┛彤吘购陀⑽沫h(huán)境有所差別,這樣可能會(huì)出現(xiàn)很多的問題,比如字體大小,亂碼,這些都要手動(dòng)調(diào)整。
話說調(diào)整CSS很多人都已經(jīng)是輕車熟路了,本文不討論。
不過可能大家會(huì)遇到類似下圖的現(xiàn)象:
產(chǎn)生亂碼的原因
這種亂碼現(xiàn)象一般是出現(xiàn)在正文截?cái)嗟臅r(shí)候,因?yàn)閃ordpress模板的字符集是UTF-8,它對(duì)于英文來說是一個(gè)字母一個(gè)字節(jié)(8位)來編碼,而中文卻是一個(gè)漢字三個(gè)字節(jié)(24位)來編碼。所以截?cái)嗟暮瘮?shù)只會(huì)判斷在多少字節(jié)的地方去截,如果到了那個(gè)地方一個(gè)漢字只顯示了三分之一或者三分之二的時(shí)候,那個(gè)漢字就不能完整顯示,而函數(shù)又不能很智能的多截一個(gè)字節(jié)或者少截一個(gè),怎么辦?于是就產(chǎn)生了亂碼。這個(gè)問題相信在很多有類似功能的國(guó)外模板上都會(huì)出現(xiàn),這不是數(shù)據(jù)庫(kù)的錯(cuò),也不是字符集的問題,只是因?yàn)橹谱髡咴诰帉懩0宓臅r(shí)候并沒有考慮到中文字符可能產(chǎn)生的問題。
所以,我們要替換截?cái)嗟暮瘮?shù)。簡(jiǎn)單來說,兩步就可以搞定。
第一步
將以下兩個(gè)函數(shù)寫進(jìn)主題所附帶的
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
中將截?cái)嗪瘮?shù)替換成新的。
<?php Limit_Char(200); ?>
<!-- 200是你需要截?cái)喽嗌僮止?jié)的長(zhǎng)度,根據(jù)實(shí)際情況修改。-->
修改完成,大功告成啦。理論上用這個(gè)辦法,只要是截?cái)嗟膯栴}都可以得到解決。
BTW:本人菜鳥一只。高手輕點(diǎn)拍磚。
話說調(diào)整CSS很多人都已經(jīng)是輕車熟路了,本文不討論。
不過可能大家會(huì)遇到類似下圖的現(xiàn)象:
產(chǎn)生亂碼的原因
這種亂碼現(xiàn)象一般是出現(xiàn)在正文截?cái)嗟臅r(shí)候,因?yàn)閃ordpress模板的字符集是UTF-8,它對(duì)于英文來說是一個(gè)字母一個(gè)字節(jié)(8位)來編碼,而中文卻是一個(gè)漢字三個(gè)字節(jié)(24位)來編碼。所以截?cái)嗟暮瘮?shù)只會(huì)判斷在多少字節(jié)的地方去截,如果到了那個(gè)地方一個(gè)漢字只顯示了三分之一或者三分之二的時(shí)候,那個(gè)漢字就不能完整顯示,而函數(shù)又不能很智能的多截一個(gè)字節(jié)或者少截一個(gè),怎么辦?于是就產(chǎn)生了亂碼。這個(gè)問題相信在很多有類似功能的國(guó)外模板上都會(huì)出現(xiàn),這不是數(shù)據(jù)庫(kù)的錯(cuò),也不是字符集的問題,只是因?yàn)橹谱髡咴诰帉懩0宓臅r(shí)候并沒有考慮到中文字符可能產(chǎn)生的問題。
所以,我們要替換截?cái)嗟暮瘮?shù)。簡(jiǎn)單來說,兩步就可以搞定。
第一步
將以下兩個(gè)函數(shù)寫進(jìn)主題所附帶的
functions.php
文件中
復(fù)制代碼
代碼如下: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
中將截?cái)嗪瘮?shù)替換成新的。
復(fù)制代碼
代碼如下:<?php Limit_Char(200); ?>
<!-- 200是你需要截?cái)喽嗌僮止?jié)的長(zhǎng)度,根據(jù)實(shí)際情況修改。-->
修改完成,大功告成啦。理論上用這個(gè)辦法,只要是截?cái)嗟膯栴}都可以得到解決。
BTW:本人菜鳥一只。高手輕點(diǎn)拍磚。
相關(guān)文章
CyberPanel安裝WordPress并配置偽靜態(tài)規(guī)則
下面教你如何在 CyberPanel安裝WordPress以及配置偽靜態(tài),需要的朋友可以參考下2023-12-27- 這篇文章主要介紹了wordpress無法安裝更新主題插件的解決辦法,需要的朋友可以參考下2020-12-27
WordPress必備數(shù)據(jù)庫(kù)SQL查詢語(yǔ)句整理
發(fā)現(xiàn)幾條比較實(shí)用的,適合 WordPress 實(shí)用的SQL語(yǔ)句。于是就趕緊收集分享出來了,需要的朋友可以參考下2017-09-23wordpress在安裝使用中出現(xiàn)404、403、500及502問題的分析與解決方法
wordpress是很多新手站長(zhǎng)搭建個(gè)人博客最喜愛的程序,但是最近在使用WordPress的時(shí)候遇到了一些問題,所以想著將遇到問題總結(jié)分享出來,下面這篇文章主要給大家介紹了關(guān)于wo2017-08-11WordPress取消英文標(biāo)點(diǎn)符號(hào)自動(dòng)替換中文標(biāo)點(diǎn)符號(hào)的優(yōu)雅方法
這篇文章主要介紹了WordPress取消英文標(biāo)點(diǎn)符號(hào)自動(dòng)替換中文標(biāo)點(diǎn)符號(hào)的優(yōu)雅方法,需要的朋友可以參考下2017-04-04- 這篇文章主要給大家介紹了wordpress自定義上傳文件類型的方法,如WordPress默認(rèn)允許上傳 .exe 后綴名的可運(yùn)行文件,那么我們?cè)趺唇褂脩粼赪ordPress后臺(tái)發(fā)表文章時(shí)上傳 .e2016-12-19
- 大家可能發(fā)現(xiàn)了當(dāng)實(shí)現(xiàn)了前端用戶中心,后臺(tái)控制面板就失去了作用,那么限制其他用戶進(jìn)入后臺(tái)控制面板就很有必要了!那么我們要怎么做呢?通過下面這篇文章分享的方法后,只2016-12-19
WordPress實(shí)現(xiàn)回復(fù)文章評(píng)論后發(fā)送郵件通知的功能
這篇文章主要介紹了WordPress實(shí)現(xiàn)回復(fù)文章評(píng)論后發(fā)送郵件通知的功能,涉及wordpress針對(duì)評(píng)論與郵件的相關(guān)操作技巧,需要的朋友可以參考下2016-10-11WordPress使用自定義文章類型實(shí)現(xiàn)任意模板的方法
這篇文章主要介紹了WordPress使用自定義文章類型實(shí)現(xiàn)任意模板的方法,可通過自定義文章類型來實(shí)現(xiàn)任意模版的使用,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-10-11WordPress后臺(tái)地址被改導(dǎo)致無法登陸后臺(tái)的簡(jiǎn)單解決方法
這篇文章主要介紹了WordPress后臺(tái)地址被改導(dǎo)致無法登陸后臺(tái)的簡(jiǎn)單解決方法,簡(jiǎn)單分析了后臺(tái)無法登陸的原因與相應(yīng)的解決方法,涉及針對(duì)wordpress配置項(xiàng)的簡(jiǎn)單修改,需要的朋友2016-10-11