文字コード掲示板


一括購読


No.094投稿日時:2003/08/30(土) 00:38    <親記事>
投稿者:花太郎

CGIでの文字化けについて

はじめまして。検索にてこちらの掲示板を見つけました、花太郎と申します。
今、掲示板スクリプトを動作テスト中に、あるサーバでだけ解消されない問題があり困っております。
新規投稿やレス機能のほかに、編集上書きの機能をつけたのですが、編集上書きの際にだけ、表題が文字化けとなり、テキストエリアでの記事に無駄な改行コードが入ってログが崩れます。

$value =~ s/\r\n\n/\r/g;
$value =~ s/\r\n/\r/g;
$value =~ s/\n/\r/g;
$value =~ s/ \r/\r/g;
$value =~ s/\t//g;
$value =~ s/\r/<br>/g;
&jcode'convert(*value,'sjis');

として、改行コードの統一と&jcode'convertをしていたのを
そのサーバに合わせて
&jcode'convert(*value, "sjis", "jis");
と、JISで入力があることを前提に文字コードの対応をしても、変化がありません。

同じフォームから、同じ機種やブラウザで同じ人間が入力し、一度目は正しく判別され、二度目は必ず文字化けする、なんてことはありえるのでしょうか。
ご教授よろしくお願い致します。


No.095投稿日時:2003/08/30(土) 14:16    <↑親記事:No.094>
投稿者:森山 将之

アドバイス

質問内容からは何が問題になっているか判断できません。
自分で書いたプログラムは自分でデバッグするのが基本です。
もしどうしても他人の助けが必要な場合は相手にわかるように説明してください。
相手にわかるように整理して書いている最中に、つまらないミスであれば発見でき
るかもしれませんし、相手にわかるような質問の仕方であれば、適切なアドバイス
をもらいやすくなるでしょう。


No.096投稿日時:2003/08/30(土) 15:16    <↑親記事:No.094>
投稿者:花太郎

アドバイスありがとうございます。
状況をきちんと説明できるか自信がありませんが、再度試みます。

3つの異なるサーバでテスト中のPerlによる掲示板スクリプトがあり、
2つのテスト環境では問題なく動作し、
1つのサーバに設置したものだけが特定の現象でログを崩すというトラブルに遭います。

新規投稿やレス機能のほかに、編集上書きの機能をつけており
ログを呼び出し→表示し→上書き保存
したときにだけ、修正した記事表題が文字化けをおこし
記事本文に入れた改行は
$value =~ s/\r/<br>/g;
でHTMLの改行タグ<br>に置き換えされるべきものがされません。

最初は一連の処理の部分を通過していないのかと思いましたが、文字化けと余計な改行コードを挿むものの、ログは更新されるので、
if($ENV{'REQUEST_METHOD'} eq "POST"){
からはじまる
$value =~ s/\r\n/\r/g;
といった箇所を通過はしています。

消去法で原因を突き止めたく、まず文字化けの際、必ずJISコードになるので
&jcode'convert(*value, "sjis", "jis");
と記述し結果を見ました。

&jcode'convert(*value,'sjis');
としていた、指定コードなしのgetcode()のときと変わらず、やはりJISになりました。
同じ画面の別の入力欄から修正した文字は化けません。
お名前、見出し、URL・・・等あって、見出しの入力欄だけが必ずJISに。

こちらの過去ログの半角カナ対応とやや類似すると思いますが
知りたいのは
&jcode'convert(*value, "sjis", "jis");
として、コードを指定しても無効な場合があるのかどうか。

また新規に記入する際と
同じフォームから、同じ機種やブラウザで同じ人間が入力し、一度目は正しく判別され、二度目は必ず文字化けする、
ということはありえるのかどうか。

編集記事の表示や上書きの方法については、このスクリプト以外の同じような機能で、過去に同じサーバ上でまったく問題なく上書きできているので、もっと別の原因かとは思いつつ、応急処置的に対処した
&jcode'convert(*value, "sjis", "jis");
で変化がないことには戸惑っています。

文字化けはブラウザ側の問題のケースという例もあるようですが
3つのテスト環境にて、MAC/IE+各ブラウザで動作テストをし、
2つの環境ではどの場合も正常、1つの環境でだけ、どの場合も不具合となっております。


No.097投稿日時:2003/08/30(土) 16:48    <↑親記事:No.096>
投稿者:花太郎

お騒がせしたしましたが、問題解決いたしました。
原因は新しく追加した変数にあり、大局を見ないで、という愚行だったのだと思いますが、文字コードに関する過去ログなどは大変参考になりました。


No.098投稿日時:2003/08/30(土) 17:50    <↑親記事:No.097>
投稿者:森山 将之

use strict;

Perl 5 を使えるのであれば、

use strict;

を入れてワーニングが出ないように、プログラムを修正する事をオススメします。
型グロブも、思わぬ落とし穴があるので使わないようにした方がいいです。
加えて、CGI であれば、#!/usr/bin/perl -wT とすべきとの話もあります。
この辺の Perl のプログラミング、HTTP, CGI に関する事は、各自で調べて勉強
するようにしてください。


Script : Sylpheed 1.24
Modified by MORIYAMA Masayuki