プロが教える店舗&オフィスのセキュリティ対策術

 フランス語圏の人と日本人が、お互いの文化や語学について話し合うフォーラム形式の掲示板をPerlで制作したいのですが、フランス語には英語にないアクセント付のアルファベットがあり、一つのログファイルに二つの文字コードが混在すると一方が化けてしまいとても不便です。

 Unicodeを使えば解決するのでしょうが、具体的にどうすれば良いのかわかりません。 jcode.plのように簡単に文字コードを変換してくれるモジュールでもあるのでしょうか。 それとも全く違う方法で解決できるのでしょうか。

 初心者なので、なるべくわかりやすく説明していただければ幸いです。 よろしくお願いします。

A 回答 (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/\&/\&amp;/g; $morceau =~ s/\</\&lt;/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&eacute;sitez pas de nous &eacute;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
    • good
    • 0

ログの表示等で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
    • good
    • 0
この回答へのお礼

ご丁寧な回答ありがとうございます。

さて、私はこれを、


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 の混合


と理解して試してみたのですが、両方とも文字化けしてしまいました。 ブラウザのエンコード設定を変えれば、どちらか片方は正常に見ることができます。 間違っているようでしたら、ご指摘していただけますか?

お礼日時:2003/05/28 04:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!