
自作掲示板を設置しています。
が、私のサイトのお客さんは書き込みに2ch風の書き込みをする方が多く来られます。
それで半角カナを掲示板で使用したいのですが、どうしても文字化けしてしまいます。
因みに
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=x-sjis">
とか
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=Shift_JIS">
というタグを挿入してみたのですが、これは関係あるのでしょうか?どちらを使ってもダメでしたが…。
またはサーバの問題なのでしょうか。
数日調べてみたのですがどうも答えがわからなかったのでこちらで質問させていただきます。
宜しくお願い致します。
No.6ベストアンサー
- 回答日時:
> もしかしたらこの部分は関係があるでしょうか。
まさにその部分です^^
コード変換を行っているのは
&jcode'convert(*value,'sjis');
なので、これを
# &jcode'convert(*value,'sjis');
とコメントアウトすれば実行されなくなります。
もし、どうしてもチェックをしたい場合、ダミー文字列を使うという手法があります。
ちょっと長めですが、以下にその方法を載せます。
まず投稿フォームの中に、以下のようなダミーの日本語文字列を埋め込んでおきます。
<INPUT type="hidden" name="jcode" value="日本語">
※ダミー文字列は、あまり短いと効果がありません。
No.4 の補足にあるデコードルーチンから
&jcode'convert(*value,'sjis');
の行を削除、またはコメントアウトします。
デコードルーチンの最後、つまり
$FORM{$name} = $value;
}
の下に、次のようなスクリプトを追加します。
# ダミー文字列の内容が変わっていたら・・・
if ($FORM{jcode} ne '日本語') {
# その文字コードを調べて
my $icode = jcode::getcode(\$FORM{jcode});
# 全パラメータに対し、$icode -> Shift_JIS の変換をする
foreach (keys %FORM) {
jcode::convert(\$FORM{$_}, 'sjis', $icode);
}
}
※全角空白を入れてるので、コピペの際は注意!
※掲示板CGIファイル自体も、Shift_JIS でないといけません。
もし、ブラウザが送信時に文字コードを変換するとしても、パラメータごとに別の方法で変換することはありえないので、確実に全角であるパラメータの文字コードを調べればよいわけです。
leaz024さん、丁寧に教えていただきありがとうございました!!
説明のとおりにしてみました。ダミーの日本語文字列も試してみました。
おかげさまでとうとう半角カナが使えるようになりました!全てきれいに表示されております!!
大変お世話になりました。
掲示板等CGIを使う際、使い勝手が100%のものがなかなか見つからないので(かなりワガママですが)色々トライしてみたいのですが、スクリプトを触るからにはもう少し勉強してみようと思います。
本当にありがとうございました。
No.5
- 回答日時:
半角だけが化けるというのは、ほぼ間違いなくCGIのデコード処理に問題があります。
デコードの際の漢字コード変換には jcode.pl がよく使われますが、多くのフリーCGIや書籍のサンプルはその使い方が甘いため、半角カナのみの場合は確実に化けるだけでなく、全角文字でもまれに文字化けすることがあります。
(jcode.pl は Shift_JIS 半角カナ文字を euc-jp と誤認します。)
どんな場合でも確実にコードを特定する、というのは非常に困難ですが、プログラムを工夫すればある程度は精度を上げることができます。
また、現在利用されているほとんどのブラウザは、HTMLと同じ文字コードで送信してきますので、HTMLが Shift_JIS であるならば、ほとんどのユーザからの送信に対して文字コードの変換は不要ということです。
以前、比較的ユーザの多い掲示板サイトで仕事をしていたときに、実験的にコード変換ルーチンをスキップさせてみたことがありますが、投稿内容が文字化けするという不具合連絡はほとんどありませんでした。
(一般的に利用されているブラウザでの連絡はありませんでした。)
一度コード変換ルーチンを外して、様子を見てみてはどうでしょうか。
この回答への補足
ありがとうございます。
詳しい解説までいただき、感謝いたします。
実は以前CGIの掲示板を使用していた際に、ある方の書き込みが(全角の普通の日本語)突然化けてしまって、とても申し訳ない思いをしたことがありました。そういうこともあるのですね。
現在設置しようとしている掲示板はMETAタグを挿入し、Shift_JISで読み込むように設定しております。
それで、お手数なのですが
「コード変換ルーチンをスキップさせてみる」
という部分、具体的にスクリプトのどういった部分の記述を直せばよろしいか教えていただけるでしょうか。
CGIの、レイアウトに関する部分は読むことができ変更も普段やっておりますが、プログラミングが関わる部分については殆んど知識がない状態です。
見当違いでしたら申し訳ありませんが、もしかしたらこの部分は関係があるでしょうか。
#------------------- フォームデコード
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $formdata, $ENV{'CONTENT_LENGTH'}); }
else { $formdata = $ENV{'QUERY_STRING'}; }
@pairs = split(/&/,$formdata);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/\n//g;
$value =~ s/\,/,/g;
&jcode'convert(*value,'sjis');
$FORM{$name} = $value;
}
もし良い方法があるようでしたら是非教えていただければと思います。
宜しくお願い致します。
No.4
- 回答日時:
> データファイルの半角で書いた部分の文字は化けています。
> データファイルに直接書き込んでアップロードするとその部分はちゃんと半角カナで表示されました。
そうなりますと今度は、
CGIがエンコード/デコードする際に化けているのか?
(掲示板ということなので)POSTでCGIが受け取った時点で既に化けているのか?
ということになるかと思います。
前者であればCGIを修正することで解決できますが、
後者だとサーバーのOSや設定で左右されてしまう問題なので解決は難しいかと。
(言わんとするところはMin_2さんと同じです)
POSTではなくGETにすることで状況が変わる可能性もありますが、
また別の問題を抱えることになるでしょうし・・・うーん、難しい。
この回答への補足
ありがとうございます。
早速スクリプト内のGETとPOSTを選択する部分を書き替えてみました。
、がやはり半角文字だけが化けてしまうようなのです。
ところでGETやPOSTが何を意味するのかすら知らないのですが、本当に勉強不足ですね…。
CGIを触るからにはもう少し語彙や記述方法の基本を学ぼうと思いました…。
No.2
- 回答日時:
通常ネットワーク上では半角カナは使用禁止にします。
どうしても文字化けを避けることができない根本的な原因があるからです。jcode.pl等で全角へ強制変換することもできますが、Shift-JISではなかなか思い通りに行かないようです。この回答への補足
ありがとうございます。
時々、例えば2chのように半角カナ書き込みが使える掲示板を見かけるので、もし私の環境でもできるようであればやってみたいなと思っております。
No.1の方のレスに補足をしましたとおりの状況です。
これで何か思い当たることがおありでしたら、また教えていただければと願っております。
宜しくお願い致します。
No.1
- 回答日時:
半角カナだけが化けているのですか?←このケースだとMETAタグによる効果はないです。
全角文字も化けているのですか?
どこで化けているか?が重要かと思います。
掲示板のデータファイルは化けていますか?
掲示板のデータファイルに半角カナを直接書き込んでも化けて表示されますか?
サーバー側に原因がある場合、解決は難しいかもしれませんが、
cgiファイル自体を文字コード変換(EUCやS-JISに)してから設置すると解決するケースもあります。
この回答への補足
ありがとうございます。
半角だけが化ける状態です。
データファイルの半角で書いた部分の文字は化けています。
データファイルに直接書き込んでアップロードするとその部分はちゃんと半角カナで表示されました。
上記の状態で何か判明することがあればまた教えていただけるでしょうか?
宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- HTML・CSS <!DOCTYPE html> <html> <head> <meta charset="utf-8 2 2023/01/05 01:04
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
linuxサーバーにUPしたCGIにネ...
-
ECUコードのCGIを編集す...
-
入力項目のチェック
-
【初心者です・・】webalizerの...
-
PerlのCGIで全角スペースを入れて
-
CGIプログラムを使った申し込み...
-
掲示板CGIでの半角カナ使用につ...
-
CGIからの文字が化ける
-
BBSの基本的なファイル操作法?
-
文字化け
-
SendMailのsubject文字化け
-
Perlのcgi-lib.plでデコードさ...
-
3桁コードの先頭文字を取り出す
-
VBAでShift-JISのURLエンコード
-
sort関数でひらがなとカタカナ...
-
ピクセル,dpiから容量(バイト...
-
改行文字保存時のゴミ
-
Windows 2003 サーバー のファ...
-
int型(2バイト)データの分割
-
windowsのファイルパス最大文字数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
utf-8でメールを送信すると件名...
-
ESC/Pのテキスト印字の制...
-
SQLServerへの出し入れで文字化け
-
Perlのcgi-lib.plでデコードさ...
-
&jcode'convert(しても文字化け...
-
漢字のエラー
-
CGIフォームから飛ばすメールが...
-
HttpURLConnection転送で漢字表示
-
入力項目のチェック
-
Window open パラメタについて
-
CGIプログラムを使った申し込み...
-
変数に日本語を代入する方法は...
-
【初心者です・・】webalizerの...
-
文字化けとパスワード変更
-
Perl/CGIでのエンコード方法
-
数値・漢字(外字含む)だと認識...
-
perl cgi のエンコード SHIFT...
-
CGIメールフォームのメールが文...
-
CGI(Perl)の文字化けについて
-
応募フォームなどの住所欄で最...
おすすめ情報