CGIで特定の文字(表・予・申・能など)が文字化けする

CGIで普通に『表・予・申・能』などといった文字を打つとなぜか文字化けします。
これは、Shift_JISコードに替えた際、末尾が「5C」となるために起こる現象です。
この現象を避けるためには、文字化けする文字の後に「\」と記述する。

CGIでメールを送信する際の件名や宛先の文字化け

CGIでメールを送信する際、件名や宛先の文字化けが文字化けすることがある。

その際は、生田 昇さんという方が公開されている mime_pls というライブラリを利用すると便利。

http://www.cc.rim.or.jp/~ikuta/mime_pls/index.html

上記から、 mimer.pl と mimew.pl という perl スクリプトを入手できます。

mimer.pl はデコード用、mimew.pl はエンコード用です。

エンコードする場合は、mimew.pl を使います。

使い方は簡単で、MIME エンコードしたい文字列を &mimeencode に 渡せば、エンコードした文字列を返してくれます。


#!/usr/local/bin/perl

require 'mimew.pl';

$sendmail = '/usr/sbin/sendmail';
$nkf   = '/usr/local/bin/nkf';

$from = '山田太郎 <taroh@foo.org>';     # 宛先の書き方1
$to = 'tanaka@tanaka.hoge.org (田中次郎)'; # 宛先の書き方2
$cc = '河田花子 <hanako@fuga.org>';

$subject = 'サブジェクト';

$body = <<END;
本文です。てすとてすと。
ほげほげ。ふがふが。むにゃむにゃ。
END

open(SENDMAIL,"| $nkf -j | $sendmail -t -i");

# &mimeencode で MIME エンコード
$encoded_from  = &mimeencode($from);
$encoded_to   = &mimeencode($to);
$encoded_cc   = &mimeencode($cc);
$encoded_subject = &mimeencode($subject);

print SENDMAIL "From: $encoded_from\n";
print SENDMAIL "To: $encoded_to\n";
print SENDMAIL "Cc: $encoded_cc\n";
print SENDMAIL "Subject: $encoded_subject\n";
print SENDMAIL "\n";
print SENDMAIL "$body";

close(SENDMAIL);

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress