[HP作成支援][No.515] 対策願い/クッキーの文字化け、その他


メニュー


特定スレッド内リンク


特定スレッド表示


親タイトル
[1] 対策願い/クッキーの文字化け、その他
投稿者情報
  • k
  • .
  • .
  • 2004年03月05日(金) 14時24分
投稿内容

またまた新たな問題が出てきましたのでご相談させて下さいf^^
今頃になって発覚したのですが、クッキーの文字化けによって投稿フォームの「おなまえ」欄のテキストエリアが表示されずに、「削除キー」が「おなまえ」欄の位置まで寄って、尚且つ「削除キー」欄の中に文字化けした「おなまえ」を含むHTMLソースが表示される状態になります。

おなまえ|[^藏? /> 削除パス <input type](必須)

投稿フォームの吐き出されたソースはこんな感じになります。
<tr><td class="frml">Name</td><td class="frmc"><input type="text" size="32" maxlength="20" name="name" tabindex="2" accesskey="v" value="^藏・ />
削除パス <input type="password" size="9" maxlength="13" name="pass" class="pass" tabindex="3" accesskey="k" value="xxxxxxxx" /> <small class="red">(必須)</small></td>

見ていただければわかるように、「value=」の「"」が括られない状態となってHTMLソースが正しく認識されないようです。
ecobbs.cgiの当該ソースを見ると、「value=\"$c_name\"$empty>」となっており、「おなまえ」に該当するクッキーである「$c_name」の値が文字化けしていることになります。
そこでGoogleで「クッキー 文字化け」で検索したところ以下のようなソースを見つけました。
http://www.futomi.com/lecture/cookie/
これによるとクッキーは「URLエンコードをしてからセットしなければいけません。」とあるのですが、ecobbs.cgiのクッキー発行とおぼしき箇所を見たかぎりそれに該当するような記述がありませんでした。
実際は他に原因があるのかもしれませんが、何か対策できる方法があればご教授下さい。

尚、文字化けが起こるのは名前に何らかの特定の日本語を使用した場合に起こるようです。
例えば私の環境では「名無し」でクッキーが文字化けして、最初に書いたような状況になってしまいました。
念のため何も書き換えていない配布状態のままのスクリプトを使い、クッキーも一度削除したうえで動作確認しましたが、やはり同じ状況になります。
別のサーバーでも同じ症状が出ました。
ただ不思議なことにこちらで公開されているサンプルをお借りして確認したところ、何故か文字化けがしません(汗
それと私の環境でもIEでだけは文字化けしません。
これは恐らくIEの実装バグがHTMLの不備を見逃して動作してしまっているようです。(IEのHTML解釈のデタラメさは有名ですね)
ちなみに試験にはOperaを使用しています。

記事情報
子タイトル
追伸
投稿者情報
  • k
  • .
  • .
  • 2004年03月05日(金) 14時35分
投稿内容

書き忘れましたが、readme.htmlを拝見したところ「新着情報」を出力するための外部.jsファイルについての記述がありましたが、配布されている圧縮ファイルの中には該当するファイルが含まれていないようです。
念のためv.111のフォルダも確認してみましたが、やはり同胞されていないようです。
これについてはバージョンアップに伴い廃止されただけなのでしょうか?

記事情報
子タイトル
Cookieエンコードやってませんが(汗)
投稿者情報
  • PONTA
  • Mail
  • HP
  • 2004年03月05日(金) 21時03分
投稿内容

今更ながらしわ寄せが・・・。対策を練らなくてはならないですね(汗)。Shift_JISが上手く認識されていないのかな?UTF-8,16で送信されてるかなぁ〜(汗)。再現出来ないので、謎です。今更ながらエンコードしてみるかな(^-^;♪ECOUP2の配布がドンドン後になってくる(汗)。バグが無くなるから良いか〜♪あっ、全CGIが対象だ・・・(鬱)

>新着情報
廃止されました。更新履歴しか書き換えてないのがバレた(汗)。v1.13では、新たな方法で最新アップ画像だけが採用されていますが、商用向けの改造なので、まだ未公開です。

記事情報
子タイトル
文字化け対策:暫定措置
投稿者情報
  • PONTA
  • Mail
  • HP
  • 2004年03月05日(金) 21時31分
投稿内容

ソースはAmazonRankingの方から調達してきました(笑)。次の様に変更して下さい。対象「ReLoad」「get_cookie」関数。分かると思うので、該当部分のみ記述。仮想配列毎にしようぜ(謎)

my $c_data = "$in{'pass'}$in{'name'}$in{'mail'}$in{'url'}$in{'clr'}$in{'trip'}";
$c_data =~ s/(\W)/'%'.unpack("H2", $1)/ego; $c_data =~ s///g;
print "Set-Cookie: eco_bbs=$c_data; expires=Thu, 1-Jan-2030 00:00:00 GMT\n";
$tok2 = "<meta http-equiv=\"Set-Cookie\" content=\"eco_bbs=$c_data; expires=Thu, 1-Jan-2030 00:00:00 GMT;\"$empty>";

my($k, $v) = split(/=/);
$k =~ s/^ //g;
$v =~ s/%([a-f\d]{2})/pack("H2", $1)/egi;

記事情報
子タイトル
文字化けこそ解消しましたがまだ問題があるようです。
投稿者情報
  • k
  • .
  • .
  • 2004年03月06日(土) 09時27分
投稿内容

アドバイスいただいた方法でエンコード&デコードをしたので文字化けこそなくなり、レイアウトが崩れるバグは無くなりましたが、クッキーの値が正常に取り込めないようです…
自分でもGoogleで検索しながらいろいろ修正を加えたりしてみましたがどうにもお手上げです…
症状としては$in{'pass'}〜${'trip'}までの値がデコードされたあとに$c_clr以外は全て$c_passに集約されてしまって、削除キーの入力フォームに$c_pass以外の値も含まれてしまいます。
当然$c_name、$c_mail、$c_urlなどの値もnullになります。
どうかお助け下さいm(_ _)m

記事情報
子タイトル
コードが化けてる(汗)
投稿者情報
  • PONTA
  • Mail
  • HP
  • 2004年03月06日(土) 14時40分
投稿内容

区切り文字として使用している半角の「<>」が削除されていました。掲示板の仕様なんですよ(苦)。というわけで、ReLoad関数のを半角で「$c_data =~ s/<>//g;」としてやって下さい。

記事情報
子タイトル
自己解決できました!
投稿者情報
  • k
  • .
  • .
  • 2004年03月06日(土) 16時47分
投稿内容

お手数かけまして申し訳ないです・・・
お返事いただいた""の区切り追加は当然ながら気が付いて追加していました(汗
""を追加しても削除キーが"xxxx"となるだけで、基本的には変わらずでした。
Googleで検索しながらいろいろな例を参考にみようみ真似でどうにか以下のコードを記述して正常な動作を得ることができましたf^^
初心者のくせに勝手にあれこれ手を加えてしまってすみません。

#### リロード処理 - ReLoad (Cookie:1=ON,0=OFF)
sub ReLoad {
my $fg_cookie = shift; #配列の最初の要素を取り出す。取り出された要素は配列から削除される。
if ($fg_cookie && !$in{'nocookie'}) {
@c_tmp = ("$in{'pass'}","$in{'name'}","$in{'mail'}","$in{'url'}","$in{'clr'}","$in{'trip'}"); #テンポラリ配列に格納
$c_data = join "", @c_tmp; #区切りコード""付加

$c_enc = $c_data; #動作確認用

$c_data =~ s/([^\w ])/'%' . unpack('H2', $1)/eg; #URLエンコード
$c_data =~ tr/ / /;

print "Set-Cookie: eco_bbs=my $c_data; expires=Thu, 1-Jan-2030 00:00:00 GMT\n";

$tok2 = "<meta http-equiv=\"Set-Cookie\" content=\"eco_bbs=$c_data; expires=Thu, 1-Jan-2030 00:00:00 GMT;\"$empty>";
}

sub get_cookie {
$env_tmp = $ENV{'HTTP_COOKIE'}; #クッキー取得
($k, $v) = split(/;/, $env_tmp); #クッキー名称・内容とクッキーナンバーに分割
($k1, $k2) = split(/=/, $k); #クッキー名称と内容を分割

$k2 =~ s/^ //g;
$k2 =~ s/%([a-f\d]{2})/pack("H2", $1)/egi; #クッキー内容をURLデコード

$kk = $k1; #動作確認用
$vv = $k2; #動作確認用
$hc = $ENV{'HTTP_COOKIE'}; #動作確認用

@k_tmp = split(//, $k2); #区切りコード""を基準に配列変数に代入
$c_pass = @k_tmp[0]; #以下、配列変数から各フォーム用変数に代入
$c_name = @k_tmp[1]; #同上
$c_mail = @k_tmp[2]; #同上
$c_url = @k_tmp[3]; #同上
$c_clr = @k_tmp[4]; #同上
$c_trip = @k_tmp[5]; #同上

とりあえず動作は正常になったわけですが、デコード部分の「#以下、配列変数から各フォーム用変数に代入」の箇所がどうにもすっきりしない記述かと思われます。
ここをすっきり記述するにはどうすればよいでしょうか?

記事情報
子タイトル
<>問題が。。。
投稿者情報
  • PONTA
  • Mail
  • HP
  • 2004年03月06日(土) 17時05分
投稿内容

my $c_data = "$in{'pass'}$in{'name'}$in{'mail'}$in{'url'}$in{'clr'}$in{'trip'}";」の所も「<>」が削除されていた見たいですね(汗)。

>Google参照コード
join関数使うんだったら配列使っても良いかなぁ☆でも、かなり無駄が多い気がするのは気のせいだろうか・・・?取り敢えず、分解したものを各変数に直接代入。「($c_pass, $c_name, $c_mail, $c_url, $c_clr, $c_trip) = split(//, $k2);」配列を使わない分メモリ節約になるかな♪

というわけで、頑張れ〜♪

記事情報
子タイトル
うぁ!文字化けしてる?
投稿者情報
  • k
  • .
  • .
  • 2004年03月06日(土) 17時06分
投稿内容

"<>"がところどころ抜けて表示されてしまうようなので、借り物のアップローダーにソースを貼っておきました。
ttp://uploader.org/normal/data/up2577.txt

記事情報
子タイトル
ムカついてきたのでエンジンソース変更
投稿者情報
  • PONTA
  • Mail
  • HP
  • 2004年03月06日(土) 17時11分
投稿内容

「<>」が表示出来るようになりましたとさ☆でも、ドッカでバグが混入してたり(^-^;)

記事情報
子タイトル
Re: ムカついてきたのでエンジンソース変更
投稿者情報
  • k
  • .
  • .
  • 2004年03月06日(土) 17時19分
投稿内容

入れ違いになりましたf^^

@c_tmp、$c_dataの配列の部分は元の"$in{'pass'}<>$in{'name'}〜略〜$in{'trip'}";記述だと何故か$c_dataには$c_passにしか値が入らないのです(疑問だ・・・

あと同様にデコードの方も直にsplit関数では@k_tmpに値が入らなかったので一旦配列に置き換えました(これも謎・・・

記事情報
子タイトル
ちょっと早とちりしました(汗
投稿者情報
  • k
  • .
  • .
  • 2004年03月06日(土) 17時28分
投稿内容

>あと同様にデコードの方も直にsplit関数では@k_tmpに値が入らなかったので一旦配列に置き換えました(これも謎・・・

これは上手くいきました!ちょっとソースがすっきりしてよい感じになりました。
ありがとうございます。

($c_pass, $c_name, $c_mail, $c_url, $c_clr, $c_trip) = split(/<>/, $k2);

でOKでした。

記事情報
子タイトル
早っ!!!
投稿者情報
  • k
  • .
  • .
  • 2004年03月06日(土) 17時37分
投稿内容

<>がちゃんと表示されるようになってますねf^^
すばやい・・・

記事情報
子タイトル
半リアルチャットか!?
投稿者情報
  • PONTA
  • Mail
  • HP
  • 2004年03月06日(土) 17時48分
投稿内容

会社からの連絡が来て、しょんぼり(T_T)。

取り敢えずは、でけたでけた。まぁー謎の部分はひたすらに謎ですが・・・。

記事情報
子タイトル
クッキーについて新たな不具合が(汗
投稿者情報
  • k
  • .
  • .
  • 2004年03月07日(日) 16時28分
投稿内容

昨日はありがとうございました。
早速ですが昨日き解決したかのように思えたクッキーの文字化け対策で新たな不具合が出てきました(汗
その不具合というのは「投票」を行うと新たなクッキー「eco_vote=value」が発行されるわけですが、クッキーを読み込む際にブラウザによって投稿に関する名前・削除キーなどのクッキーと、クッキーの有無チェック用フラグのクッキー・投票用のクッキーなどの読み込み順番がブラウザによって相違するようで、支障が出てきました。

$ENV{'HTTP_COOKIE'};
で読み込んだ生の状態のクッキー例
【IE】
クッキーの値:eco_cook=1; eco_bbs=7653<>名無しローソン<><><>000099<>9712; eco_vote0002=3

【Opera】
クッキーの値:eco_bbs=0001<>名無しさん<><><>993300<>; eco_vote0001=1; eco_vote0003=1; eco_vote0008=1;

という感じです。
どちらのブラウザでも一旦クッキーを削除して確認しましたが、読み込まれる順番は各ブラウザで固定のようです。
ただ見てもらえばわかるように順番がそれぞれのブラウザで違うために投稿フォームでのクッキーの反映がおかしくなり、IEでは正しく機能しないといった状態になります。
他のブラウザ、Macなどではどうなるのかまではわかりませんが、配列を使ってクッキーネームを識別するなどしないといけない予感です…
具体的にどうすれば解決できるか理屈はわかるのですが、今はそこまでの技量がないので、ちょっと時間をかけて勉強しながら判定ルーチンを作成するしかないようですf^^
お時間があれば助けていただきたいのですが(汗
それは無理でも昨日の対策では不具合があるという報告もかねて質問させていただいた次第です。
ブラウザごとのクッキーの認識の違いについてはよそで調べてみますので、何かわかりましたらまた書き込みさせていただきます。

記事情報
子タイトル
仮想配列にバグ発覚!?
投稿者情報
  • PONTA
  • Mail
  • HP
  • 2004年03月07日(日) 17時37分
投稿内容

配列じゃなくて、仮想配列使ってます(^-^;)。get_cookie関数の「$c_vote{'$1'} = $v if ($k =~ /^eco_vote(\d )$/);」を「$c_vote{"$1"} = $v if ($k =~ /^eco_vote(\d )$/);」に変更してください。シングルかダブるかの違い・・・仮想配列「c_vote」をトレースしたら理由が分かりますね。(プログラムソースなので引用+code要素を用いてみた編)

# 仮想配列内を表示してみる罠
foreach ( my($k, $v) = each(%c_vote) ) {
print "記事番号[$k] = 投票値[$v]";
}

追伸:ココはバグ報告兼Perl勉強会みたいになってるね☆

記事情報
子タイトル
なんとなく自己解決f^^
投稿者情報
  • k
  • .
  • .
  • 2004年03月07日(日) 17時56分
投稿内容

改造前のソースをよくよく眺めていて、foreach{}で回していることに気づき、
解決方法がわかりました。
あとは自分で何とかやってみます。
どうしてもわからなければまたご相談します。

記事情報
子タイトル
たびたびすみません(>_<)
投稿者情報
  • k
  • .
  • .
  • 2004年03月07日(日) 18時01分
投稿内容

レスしていただいたのを見逃していました(汗
配列と仮想配列…違いがいまだによくわかっていなかったり(お
精進しますf^^
アドバイスいただいたことを踏み台に試してみますね。
あ、それからチャット状態にしてしてしまってホント申し訳ありません。
ですが勉強会?は大変参考になりますf^^

記事情報
子タイトル
踏み台にされる
投稿者情報
  • PONTA
  • Mail
  • HP
  • 2004年03月07日(日) 23時25分
投稿内容

kさん、かなり改造できてるみたいで(^-^;)。頑張れ頑張れ〜♪これって無意味レス(笑)?

記事情報
子タイトル
出来ました(感動!)
投稿者情報
  • k
  • .
  • .
  • 2004年03月08日(月) 14時25分
投稿内容

sub get_cookie {
foreach ( split(/;/,$ENV{'HTTP_COOKIE'}) ) {
my($k, $v) = split(/=/);
$k =~ s/^ //g;
$v =~ s/%([a-f\d]{2})/pack("H2", $1)/egi;
($c_pass, $c_name, $c_mail, $c_url, $c_clr, $c_trip) = split(/<>/, $v) if ($k eq 'eco_bbs');
$c_vote{"$1"} = $v if ($k =~ /^eco_vote(\d )$/);
$c_cook = $v if ($k eq 'eco_cook');
$c_himg = $v if ($k eq 'eco_himg');
} $c_clr = "666666" if (!$c_clr);
}

でうまくいきましたf^^
やっぱり元がうまく出来てるのに勝手にイジってはマズかった(汗

>踏み台にされる
言葉が不適切で申し訳ありませんf^^
まだまだ未熟ですが頑張って勉強します。

それと先日の環境によっては文字化けしない件ですが・・・
http://216.239.57.104/search?q=cache:mcfRyrnVqroJ:www23.tok2.com/home/FAQ/cgi1.html 繧ッ繝・く繝シ縲荳榊・蜷・amp;hl=ja&ie=UTF-8
にあるようにHTTPヘッダーの問題があるのかもしれないですね。
一応設置するサーバーはTOK2ではないのですが、無料レンタルサーバーなので当然自動挿入広告があるもので、それもひとつの要因だったのかもしれません。
aaacafe!でも試しましたが、やはり同様な症状がでました。
ただ、広告の無いレンタルサーバーでも同様な症状になったことはまたまた疑問なのですが・・・

記事情報
子タイトル
トクトクかぁ〜
投稿者情報
  • PONTA
  • Mail
  • HP
  • 2004年03月08日(月) 16時40分
投稿内容

何気にtok2対策してたりするんだよね(^-^;)。で、最近分かったこと。サーバの設定に依存する。サンプリングした無料サーバ、「infoseek, tukaeru, prohosting」は正常、「tok2, aaacafe, xrea, aqweb」で不具合が起きます。但しxreaで広告免除サービスが適応された場合(当サイト)は正常です。これらの適切な回避方法が何となく分かりましたので、今後対策を検討してみたいと思います。というわけで、kさん「infoseek, tukaeru, prohosting」で調査お願いします<人任せ(笑)。

今回のサンプリング調査で、ECOUP有料サーバで使われている割合が非常に高いですね〜♪v1.11以降が対象で半分以上が有料サーバでした。そういうもん何でしょうね☆

記事情報
子タイトル
追伸:広告挿入有無での動作
投稿者情報
  • PONTA
  • Mail
  • HP
  • 2004年03月08日(月) 16時46分
投稿内容

無料xreaサーバですが、広告が非表示になるxフォルダ内では正常に動作しました。「http://wallshop.s2.xrea.com/ecoup/」「http://wallshop.s2.xrea.com/x/」共にLocation設定。

記事情報
子タイトル
Re: 追伸:広告挿入有無での動作
投稿者情報
  • k
  • .
  • .
  • 2004年03月09日(火) 13時46分
投稿内容

>kさん「infoseek, tukaeru, prohosting」で調査お願いします
「使える」以外はアカウント持っているのですが、プロホスはFTPが繋がらないまま放置状態だし、iswebも諸般の事情で放置したままですからねぇf^^
ちょっと時間が出来たときにでも確認してみます。

とはいえ今回の不具合修正でまずほとんどの環境で問題がなくなったのではないですか?

話しは変わりますが、今更ながら昨日ActivePerlとAnHTTPDを導入しました(汗
本格的のにPerlを勉強するには環境を整えないとダメですからねf^^
ついでにPerl用にエディタもez-HTMLというやつに変えました。
今までは秀丸でやっていたのですが、ez-HTMLにしてからはCGIのローカルプレビューもできるようになって大変重宝します♪
これから本格的にPerlを勉強しようとする人には大変お勧めですね。
もちろんそこまで勉強する気が無くてもいちいちサーバーにアップロードして確認するような他人迷惑なこともしないでローカルで手軽に動作チェックが出来るので導入をお勧めします。

記事情報
子タイトル
ローカルで無限ループは常です♪
投稿者情報
  • PONTA
  • Mail
  • HP
  • 2004年03月09日(火) 18時05分
投稿内容

やったー何気に言ったら調査してくれるって♪ECOUP2ばかり弄らないでECOUPも更新しなくちゃいけないなぁ。

ez-HTMLですか、私も使ってみようかなぁ〜。IEだけなら、楽に確認出来るね。ゴチャゴチャしたエディタは好かんから使えるかなぁ〜。下手した「IE6,OP6,OP7,NN4,NN7,MozillaFirebird,Lnyx」7つもブラウザ立ち上げてますね(汗)。使えたら乗り換え決定ですね。

記事情報
子タイトル
マジですか?( ̄□ ̄;)
投稿者情報
  • k
  • .
  • .
  • 2004年03月09日(火) 22時55分
投稿内容

>やったー何気に言ったら調査してくれるって♪
iswebはまぁ時間さえあれば可能なんですが、ProhostingはFTPがダメダメだからかなり厳しいかも…
Netfirmなら比較的簡単なんですがねぇf^^
いづれにせよしばらく時間は下さい。

追伸
ez-HTMLはデフォルトでIE、NN、Opera、Mozilla、FireBirdは対応しているのでよさげではないですか?恐らくデバッグが楽になると思いますf^^

記事情報
子タイトル
ECOUP(エコアップ)v1.14公開CHU♪
投稿者情報
  • PONTA
  • Mail
  • HP
  • 2004年03月09日(火) 23時49分
投稿内容

「v1.12→(v1.13)→v1.14」0.02も増えましたね。というわけで、サポート情報をフィードバックしました。これで、ある程度いけるんじゃないでしょうかねぇ♪菅原配布物が増えていたのでそれも包括しました。

>サーバ調査
何時でも良いですよ。お暇な時にでもお願いします。

>ez-HTML
かなり対応していますね。設定がもの凄く憂鬱になりました。アウトラインとツリー解析とサイズが、確認用にかなり使えそうな感じです。使えないのがタブメニューバー(笑)。使わなそうな物ばかりある(汗)。ここが自分で変更出来たら最高なんだけどなぁ〜。基本テンプレート,meta,link,rubyとフォーム系だけで十分だ(^-^;。CSSの連携があればかなり嬉しいなぁ<おぃ!

追伸:私が秀丸を使う理由・・・ダブルクリックで文字が最適に選択されるところ(^-^;)。実は、これだけで十分なのです〜♪

追伸:Perl文法チェック・・・最悪でした・・・。おかしいと思ってたら、やっぱり間違ってたのかぁ<分かってたら直せよぉ!

記事情報