
フランス語圏の人と日本人が、お互いの文化や語学について話し合うフォーラム形式の掲示板をPerlで制作したいのですが、フランス語には英語にないアクセント付のアルファベットがあり、一つのログファイルに二つの文字コードが混在すると一方が化けてしまいとても不便です。
Unicodeを使えば解決するのでしょうが、具体的にどうすれば良いのかわかりません。 jcode.plのように簡単に文字コードを変換してくれるモジュールでもあるのでしょうか。 それとも全く違う方法で解決できるのでしょうか。
初心者なので、なるべくわかりやすく説明していただければ幸いです。 よろしくお願いします。
No.2ベストアンサー
- 回答日時:
惜しいのですがログファイルの保存形式が違います。
ログファイルもスクリプトなどと形式をあわせる、
つまりutf-8にする必要があります。
いい加減なスクリプトを書いて試したところ、
WindowsXP + IE6/Opera7の環境では、正しく入力・表示できています。
以下に載せます。
#!/usr/bin/perl
#テスト用に作成したもので、セキュリティ対策や
#ロックなどの通常欠くべからざる処理をはしょって
#います。このまま使用しないでください
sub mourir {
my ($erreur) = @_;
print "Content-type: text/plain\r\n\r\n";
print "error $erreur";
exit 0;
}
sub decoder {
my ($enigme) = @_;
$enigme =~ s/%([0-9a-fA-F].)/{chr(hex('0x'.$1))}/ge;
return $enigme;
}
sub laver {
my ($morceau) = @_;
$morceau =~ s/\&/\&/g; $morceau =~ s/\</\</g;
return $morceau;
}
$fichier = "/tmp/logfile.txt";
print <<FDP;
Content-type: text/html;charset=utf-8\r
\r
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
<form action="/cgi-bin/a.cgi" method="POST">
N'hésitez pas de nous écrire par ici: <BR>
<textarea name="texte"></textarea>
<input type="submit" name="bouton" value="cliquer">
</form>
FDP
unless (defined($ENV{'CONTENT_LENGTH'})) {
print "</body></html>";
exit 0;
}
$longueur = $ENV{'CONTENT_LENGTH'};
open dfo, ">>$fichier" || mourir $!.':1:'.__LINE__;
print dfo "<hr><pre>\n";
while ( 0 < ($resultat = read(STDIN, $morceau, $longueur))) {
print dfo $morceau;
$longueur -= $resultat;
last unless $longueur;
}
print dfo "\n</pre>\n";
close dfo || mourir $!.':3:';
print "Et voici...";
open dfi, $fichier || mourir $!.':4:';
while( <dfi>) {
print decoder($_);
}
close dfi || mourir $!.':5:';
print <<FDC;
</body>
</html>
FDC
No.1
- 回答日時:
ログの表示等で1画面に日仏両言語を混在させるなら、
たぶん「UTF-8」を使用するのがいいかなと思います。
今手元に環境がないので試していませんが、
表示するページの「レスポンスヘッダ」に
Content-type: text/html; charset=utf-8
をつけ、なおかつHEADエレメント内に
<meta http-equiv="content-type" content="text/html; charset=utf-8">
を書けば、utf-8の内容でform入出力できそうです。
ログファイルには、formから入力されたままの
形式で保存しておけばよいと思います。
ただし、cgi/htmlの漢字はutf-8対応のエディタで
書いておく必要があります。
参考URL:http://euc.jp/i18n/charcode.ja.html
ご丁寧な回答ありがとうございます。
さて、私はこれを、
cgiのヘッダー → Content-type: text/html; charset=utf-8
出力されるHTMLのHEADエレメント内 → <meta http-equiv="content-type" content="text/html; charset=utf-8">
スクリプトの記述・保存フォーマット → UTF-8 (私の使用しているエディターでは、Unicode(UTF-8)と表示されます。)
ログファイル → iso-8859-1 と euc-jp の混合
と理解して試してみたのですが、両方とも文字化けしてしまいました。 ブラウザのエンコード設定を変えれば、どちらか片方は正常に見ることができます。 間違っているようでしたら、ご指摘していただけますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlを難読化、暗号化させたい
-
プログラミングについての質問...
-
SUN BBSの改造方法
-
wordの数式について 定積分を書...
-
チェックボックスの返す値
-
ラジオボタンが両方とも選択で...
-
VB初心者。小数点以下の表示で...
-
「value」に2つの値をセットす...
-
掲示板(kentさんの所のsunbbs...
-
MSPゴシックで、一番幅を取る文字
-
[HTML]プルダウンメニューの横...
-
EXCELとの連携
-
ラジオボタンを選択済みにする...
-
Error: No Recipient というエ...
-
WEBページを強制的に横画面で見...
-
サーバー上のPDFにCGIでパスワ...
-
iis+cgiでmultipart/form-data...
-
INPUT TYPE
-
シングルコーテーション(')と...
-
ラジオボタンとセレクトメニュ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WEBアプリケーションからフォル...
-
プログラミングについての質問...
-
popular among popularの違いを...
-
perlを難読化、暗号化させたい
-
Locationの文字化け
-
CGI.pmのstart_htmlで思い通り...
-
ホームページのエンコード
-
アップしたホームページが文字...
-
MySQL+phpでHTML表示をhif...
-
CGI実行できない。ソースが表示...
-
メール送信後のHTMLが文字化け...
-
HPが文字化けしてしまいます
-
ウェブサイトが文字化けします
-
CGIプログラムを使った申し込み...
-
欧文 iso-8859-1 と 日本語 e...
-
PHPのlocationについて
-
CGIページの最終更新日時
-
cgiからsendmailを送信で文字化け
-
IE以外のブラウザでキャッシュ...
-
文字コードが正常に変換されま...
おすすめ情報