KENT-WEB サポートコーナー 過去ログ [ 0012 ]


記事No: 6709
投稿日: 2009/11/15(Sun) 17:13:08
タイトルLIGHT BOARDの項目変更について
ID情報: mikaduki
投稿者: サユキ
URLhttp://mikaduki.xii.jp/samplebbs/light.cgi

「LIGHT BOARD v7.0」についてお伺いします。
タイトル欄をセレクトボックスでの複数選択欄に変更しました。(例)「好きな果物」を選択してもらう
すると、投稿は出来るのですが、Firefoxで見た時にこの複数選択した場合の果物名と果物名の間に、「◆+白抜きの『?』マーク」が出てしまいます(IEで見ると出ていません)。チェックボックスに変更しても同様です。

この状態でログファイルをダウンロードして開こうとすると(テキストエディタ:TeraPad使用)、Null文字が含まれているので半角空白に変換しますというダイアログが出てからファイルが開き、マークが出ている箇所が「<>・りんご ・いちご<>」といったように半角空白になっています(「・りんご」直後の「 」)。
(1つだけ選択した状態で書き込むとマークは出ず、ログにも、半角空白に変換されるNull文字は出来ません)

この「◆+白抜きの『?』マーク」が出ないようにするにはどうしたらいいでしょうか。

パーミッションはlight.cgi 700 、data.cgi 600、アスキーモードでアップロードしています。
cgiファイルはこちらです(110〜140行付近にセレクトボックス)。http://mikaduki.xii.jp/samplebbs/light.txt

# 自由に項目を追加できるといった掲示板に乗り換えようかと思ったのですが
# LIGHT BOARDならスパム対策も簡単にできるので使い続けたいと思い、投稿させていただきました


記事No: 6710
投稿日: 2009/11/15(Sun) 18:28:41
タイトルRe: LIGHT BOARDの項目変更について
ID情報: pachira
投稿者: pachira
URLhttp://www5e.biglobe.ne.jp/~pachira/

> 「LIGHT BOARD v7.0」についてお伺いします。
> タイトル欄をセレクトボックスでの複数選択欄に変更しました。(例)「好きな果物」を選択してもらう
> すると、投稿は出来るのですが、Firefoxで見た時にこの複数選択した場合の果物名と果物名の間に、「◆+白抜きの『?』マーク」が出てしまいます(IEで見ると出ていません)。チェックボックスに変更しても同様です。
>
> この状態でログファイルをダウンロードして開こうとすると(テキストエディタ:TeraPad使用)、Null文字が含まれているので半角空白に変換しますというダイアログが出てからファイルが開き、マークが出ている箇所が「<>・りんご ・いちご<>」といったように半角空白になっています(「・りんご」直後の「 」)。
> (1つだけ選択した状態で書き込むとマークは出ず、ログにも、半角空白に変換されるNull文字は出来ません)
>
> この「◆+白抜きの『?』マーク」が出ないようにするにはどうしたらいいでしょうか。
>
> パーミッションはlight.cgi 700 、data.cgi 600、アスキーモードでアップロードしています。
> cgiファイルはこちらです(110〜140行付近にセレクトボックス)。http://mikaduki.xii.jp/samplebbs/light.txt
>
> # 自由に項目を追加できるといった掲示板に乗り換えようかと思ったのですが
> # LIGHT BOARDならスパム対策も簡単にできるので使い続けたいと思い、投稿させていただきました


原因はmultipreでしょうね。
http://www.google.co.jp/search?source=ig&hl=ja&rlz=&q=select+multiple+perl&btnG=Google+%E6%A4%9C%E7%B4%A2&meta=lr%3D&aq=f&oq=

multipreをどうしても使うなら、以下あたりが参考になるかも知れません。頑張って下さい。
http://www.futomi.com/lecture/form/cgilib.html#s3_2


記事No: 6711
投稿日: 2009/11/15(Sun) 21:02:36
タイトルRe: LIGHT BOARDの項目変更について
ID情報: teketen
投稿者: てけてん

同じname(selectでもcheckboxでも)の値を複数受け取った場合は、KENTさんのスクリプトでは、null文字(\0)で値を区切るようになっています。
フォームのselectがmultipleであるかは、関係ありません。
(スクリプトの方で、フォームから送られたnull文字がある場合は削除して、改めてnull文字で値を区切るようにしているため)

ですので、既存のname="sub"を利用するなら、
init.cgi
154行目付近

$in{$key} .= "\0" if (defined($in{$key}));



$in{$key} .= $key eq 'sub' ? '' : "\0" if (defined($in{$key}));

に変更してみて下さい。


記事No: 6713
投稿日: 2009/11/15(Sun) 22:39:46
タイトルRe^2: LIGHT BOARDの項目変更について
ID情報: mikaduki
投稿者: サユキ
URLhttp://mikaduki.xii.jp/samplebbs/light.cgi

> 同じname(selectでもcheckboxでも)の値を複数受け取った場合は、KENTさんのスクリプトでは、null文字(\0)で値を区切るようになっています。
> フォームのselectがmultipreであるかは、関係ありません。
> (スクリプトの方で、フォームから送られたnull文字がある場合は削除して、改めてnull文字で値を区切るようにしているため)
>
> ですので、既存のname="sub"を利用するなら、
> init.cgi
> 154行目付近
>
> $in{$key} .= "\0" if (defined($in{$key}));
>
> を
>
> $in{$key} .= $key eq 'sub' ? '' : "\0" if (defined($in{$key}));
>
> に変更してみて下さい。

ご回答ありがとうございます。出来ました!
pachiraさんのご回答を参考に再度いじってみたもののうまくいかず諦めかけていましたが、てけてんさんのご回答に従ってinit.cgiにご指定の記述を追加・変更してみましたら、目的の動作になりました。

・結果:
 1) Firefoxで表示されるマーク(記号)が消えました。
 2) ログファイルを開くときのNull文字云々のダイアログが消え、当該箇所の半角空白が消えました。
 3) セレクトボックス、チェックボックスのいずれでも動作し、両方を併用しても大丈夫でした。

お二方様、今回は大変お世話になりました。感謝します。
本当にありがとうございました。


[検索ページ]