待辦事項 #4140

コメントのタイトルの桁数制限で最後のマルチバイト文字が欠損することがある
啟用日期: 2004-04-01 19:28 最後更新: 2005-05-27 20:32

回報者:
負責人:
(無)
類型:
狀態:
關閉
元件:
(無)
里程碑:
(無)
優先權:
5 - 中
嚴重程度:
5 - 中
處理結果:
修正
檔案:

細節

対象:全Xoopsだと思います
状況:
ニュースとかで、コメントを使用とすると、
タイトル欄が桁数制限で最後のマルチバイト文字が欠損する
ことがあります。
そのため、プレビューしただけで
https://sourceforge.jp/tracker/index.php?func=detail&aid=4030&group_id=64&atid=325
と同様に
欠損された文字が登録されると、つぎに表示したとき最後の
文字を正しく表示できずタイトル欄がタグ交じりとかになる
ことも有ります。
(レイアウトがくずれたり、投稿できなかったり、するはず)
たぶん
新規コメント投稿の場合は、
include/comment_new.php line 53 から
$com_title = "Re: ".substr($com_title, 0, 56);
となっているところ

変更案
https://sourceforge.jp/tracker/index.php?func=detail&aid=4030&group_id=64&atid=325
がされているのなら
$com_title = "Re: ".xoops_substr($com_title, 0, 56);
かな?
-----
ところで、ここは、なぜ 56バイト 指定なのでしょうか?
テーブル項目としては?255バイトのはずなんだけど、キーは
40バイトしかないのか?でもなにが基準になっているのでしょ
うか。

#
# Table structure for table `comments`
#

CREATE TABLE xoopscomments (
com_id mediumint(8) unsigned NOT NULL auto_increment,
com_pid mediumint(8) unsigned NOT NULL default '0',
com_rootid mediumint(8) unsigned NOT NULL default '0',
com_modid smallint(5) unsigned NOT NULL default '0',
com_itemid mediumint(8) unsigned NOT NULL default '0',
com_icon varchar(25) NOT NULL default '',
com_created int(10) unsigned NOT NULL default '0',
com_modified int(10) unsigned NOT NULL default '0',
com_uid mediumint(8) unsigned NOT NULL default '0',
com_ip varchar(15) NOT NULL default '',
com_title varchar(255) NOT NULL default '',
com_text text NOT NULL,
com_sig tinyint(1) unsigned NOT NULL default '0',
com_status tinyint(1) unsigned NOT NULL default '0',
com_exparams varchar(255) NOT NULL default '',
dohtml tinyint(1) unsigned NOT NULL default '0',
dosmiley tinyint(1) unsigned NOT NULL default '0',
doxcode tinyint(1) unsigned NOT NULL default '0',
doimage tinyint(1) unsigned NOT NULL default '0',
dobr tinyint(1) unsigned NOT NULL default '0',
PRIMARY KEY (com_id),
KEY com_pid (com_pid),
KEY com_itemid (com_itemid),
KEY com_uid (com_uid),
KEY com_title (com_title(40))
) TYPE=MyISAM;
# --------------------------------------------------------

Ticket History (3/4 Histories)

2004-04-01 20:03 Updated by: toshimitsu
評語
Logged In: YES
user_id=6033

同様のところ
include/comment_reply.php LINE 59
$com_title = "Re: ".xoops_substr($com_title, 0, 56);

include/commentform.inc.php LINE 32
$subject = "Re: ".substr($subject,0,56);


2004-04-02 15:17 Updated by: toshimitsu
評語
Logged In: YES
user_id=6033

訂正下記のところ元本は
include/comment_reply.php LINE 59
$com_title = "Re: ".substr($com_title, 0, 56);
でした。
-----------
56バイトとしてるのは、タイトル入力欄の横幅?にあわせて
全角28文字と考慮しているのなら
できれば、各箇所をUTF-8のときの1文字3バイトだから、全角文字2
8文字分 84バイトと判定をいれるとかしてもらえると良いかも


if (_CHARSET == "UTF-8"){
$com_title
= "Re: ".xoops_substr($com_title, 0, 84, "");
} else {
$com_title
= "Re: ".xoops_substr($com_title, 0, 56, "");
}
2004-04-07 08:40 Updated by: toshimitsu
評語
Logged In: YES
user_id=6033

発生する状況場合
例えば、news の場合、
ニュースのタイトルが56バイトを超えて、56バイト目が日本語2バイト
文字で有る場合は100%発生します。
タイトルk文字列:

1234567890123456789012345678901234567890123456789012345漢字

のときに、
このニュースに対して1回目のコメントをしようとすると、
表題欄の終端が、正しくhtml認識できずに、下記のようなタグ混じりと
なります。
Re:
1234567890123456789012345678901234567890123456789012345・ />
</td></tr><tr valign=

コメントのpeplayタイトルは255バイトまで許可されいることもあり
このままテーブルタグが不正に混じっている状態でテーブルに登録され
ます
2005-05-27 20:32 Updated by: (del#8225)
  • Ticket Close date is changed to 2005-05-27 20:32
  • 處理結果 Update from to 修正
  • 狀態 Update from 開啟 to 關閉
評語
Logged In: YES
user_id=8225

comment_new.php、comment_reply.php及びcommentform.inc.phpす
べてに、
2.0.7.1以降で、xoops_substrを使用するように変更されている事
を確認致しました。

Attachment File List

No attachments

編輯

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » 登入