2005
30
[TT] 修正UTF8字數截取亂碼
IE的使用者感覺應該比較明顯,Fx頂多只會顯示出問號(置入式行銷又一例XD),這個問題之前DearJohn也跟我問過,那時雖然印象中有看過解決方法,但是卻因為做法麻煩又沒什麼大礙就沒記下
碰巧在Beata這邊看到,是整個修改好的程式碼,就拿來用了,有用有保佑,現在不會有亂碼或問號發生了,修改完後記得版面設定字數縮減那邊也要調整一下,會變的跟原本不太一樣這樣
原始出處為夢遊華人中文網
將inc_function.php的
-
function str_cut($str, $maxlen, $type) {
-
$str = str_trans_rev($str);
-
$len = strlen($str);
-
-
if ($len <= $maxlen) return str_tag_off(str_trans($str));
-
for ($i=0;$i<($maxlen-1);$i++) {
-
if (ord(substr($str,$i,1)) < 128) {
-
$return_str .= substr($str,$i,1);
-
} else {
-
$return_str .= substr($str,$i,2);
-
$i++;
-
}
-
}
-
-
$str = str_tag_off(str_trans($str));
-
$return_str = str_tag_off(str_trans($return_str));
-
-
if ($type) return "<span title="$str">".$return_str."..</span>";
-
else return $return_str."..";
-
}
取代為
-
function str_cut($str, $maxlen, $type) {
-
// Sea Otter
-
// 代碼說明:對原有中文截取函數的修正
-
// 1、長度錯誤
-
// 2、位置錯誤
-
// 變更方式:修改
-
// 變更時間:2005.05.10
-
// 變更開始———————————-
-
/*
-
// 原截取代碼
-
if ($len <= $maxlen) return str_tag_off(str_trans($str));
-
for ($i=0;$i<($maxlen-1);$i++) {
-
if (ord(substr($str,$i,1)) < 128) {
-
$return_str .= substr($str,$i,1);
-
} else {
-
$return_str .= substr($str,$i,2);
-
$i++;
-
}
-
}
-
*/
-
-
$str = str_tag_on(str_trans_rev($str));
-
$i = 0;
-
$l = 0;
-
$len = strlen($str);
-
$return_str = $str;
-
$f = true;
-
while ($i <= $len) {
-
if (ord($str{$i}) < 0×80) {
-
$l++;
-
$i++;
-
}
-
else if (ord($str{$i}) < 0xe0) {
-
$l++;
-
$i += 2;
-
}
-
else if (ord($str{$i}) < 0xf0) {
-
$l += 2;
-
$i += 3;
-
}
-
else if (ord($str{$i}) < 0xf8) {
-
$l += 1;
-
$i += 4;
-
}
-
else if (ord($str{$i}) < 0xfc) {
-
$l += 1;
-
$i += 5;
-
}
-
else if (ord($str{$i}) < 0xfe) {
-
$l += 1;
-
$i += 6;
-
}
-
if (($l >= $maxlen - 1) && $f) {
-
$return_str = substr($str, 0, $i);
-
$f = false;
-
}
-
-
-
if (($l > $maxlen) && ($i <=$len)) {
-
$return_str = str_tag_off(str_trans($return_str))."..";
-
if ($type) {
-
$str = str_tag_off(str_trans($str));
-
$return_str = "<span title="$str">".$return_str."</span>";
-
}
-
break;
-
}
-
}
-
return $return_str;
-
// 變更結束———————————-
-
}
站內相關文章
閱讀這篇文章的人,他們也看:
Warning: Invalid argument supplied for foreach() in /home/gooloosc/public_html/blog/wp-content/plugins/wheredidtheygov1.php on line 98
這篇文章有 10則 迴響:
2
有沒有 MT 的? (^.^)
之前改過,不過因為完全不熟 perl,改了半天沒成功….=.="
我是不知道怎麼拿perl字串裡某個字元啦…
C 的話可以用 str[n] 直接拿….
3
你試試看用這個網址能不能傳送
http://beata.daxp.com/Blog/rserver.php?mode=tb&sl=20
6
在vsy那邊看到的,一開始用筆記本修個半天,難度不高,只是看錯碼,所以老編不好,花了十幾分鐘。
編好後,看起來功能列更漂亮了,只要再做點細部調整就OK,謝謝vsy分享嚕!
10
我連inc_function.php也不知道在那…
:twisted:
有誰告訴一下我?:cry:
再看亂碼的倒不如用回IE………
Using
Internet Explorer 6.0 on
Windows XP








這個問題我也困擾很久
真的有用耶
感謝vsy提供分享^^