ãããªã©ãã しかし、CGIプログラムをシフトjisで記述すると文字化けやエラーを起こす場合や正規表現が正常に実行されない場合があります。 原因は、日本語が1文字2バイトのコードで表されますが、その2バイト目がPerlの特殊文字に重複したり正規表現にマッチしたりする為です。 URLのパス binmode(STDOUT, ":utf8"); # èªåã§ãã©ã°ãå¥ããã¨ããæç¤º(4.c), utf8::decode($buf); # ãã¡ã¤ã«ããèªã¿è¾¼ãã ãã¨ãä»ã®å¦çã«å ¥ãåã«utf8ãã©ã°ãä»ãã (4.a), # uri escape ããããã®ãå ã«æ»ã㦠(4.b), utf8::decode($val); # utf8ãã©ã°ãä»ãã¦ãã (4.b), # ä½ããããã®ã¾ã¾æ¸ãè¾¼ããâµbinmode(STDOUT, ":utf8");ãã¦ãã (4.c), # uri escape ããããã®ãå ã«æ»ãã¦ãã (4.b), utf8::encode($str); # ãã©ã°ãå¥ããã¦ãã(4.cè£è¶³), Kent Webçã®CGIæ²ç¤ºæ¿ããã°ã©ã ãæåã³ã¼ãã, ã»printæã®ã¨ããã§æååããã¦ãã¾ãï¼ã¨ã©ã¼ãåºã¦ãã¾ãï¼ã, ã»ã¯ããã¼ã§æ¶ããããã¯ãã®ååãªã©ãæååããã¦ãã¾ãã. $msub_bがエンコードされたサブジェクトということになります。 エンコード対象外(半角英数のみ)の部分を$headersにまとめています。 use MIME::Base64; ##MIME::Base64がインストールされていることが前提 use CGI することで使うことができるCGIモジュールは CGIをPerlでプログラムする際に非常に便利だが、 デフォルトで使うと文字が英語で扱われるので文字化けする。 CGIの動作自体は大丈夫だけど、こと文字に関しては非常にややこしい。 1. (引用元)http://e-words.jp/w/HTTP.html, ※今回は、リクエストメソッドがGETのため、リクエストボディは存在しない(存在する場合については後述する), 簡単に言うと、/index.htmlというリソースを、HTTPの1.1バージョンの通信で、GETというリクエストの方法で、クライアントからサーバに要求している。, HTTPのメソッドは、その用途によってGETとPOSTで使い分ける必要がある。(他にもPUTとかDELETEとかあるけど、本記事ではGETとPOSTだけ扱う), クエリ文字列とは、WebブラウザなどがWebサーバに送信するデータをURLの末尾に特定の形式で表記したもの。 $msub_b = "=?utf-8?B?" 宜しくお願いいたします。, Perlでメールフォームを作成しております。 $msub = $_[0]; なにが文字化けするのでしょうか? ##送信処理 なにかとutf-8便利でさくさくと問題なく作成していたのですがメール送信の肝心な部分で問題が出てきました。 $msub = $subject; あるwebサイトをリニューアル(正確には別サイトですが・・)制作していたんですが、 ##送信処理 $mbody = $_[1]; http://www.securehtml.jp/utf-8/perl_utf_mail.html ã¯ããã¼ã«ã¯ uri escape å¦çããæååãæ¸ãè¾¼ã¿ã¾ããããã®ã¾ã¾ã ã¨ãã©ã°ï¼ã´ãï¼è¾¼ã¿ã§ uri escape ããã¦ãã¾ãã¾ãã フォームでメール送信したく、CGIでフォームメールを作成しました。 http://www.atmarkit.co.jp/ait/articles/0801/18/news124.html, ※ ブログでも同一記事を投稿している https://triple-underscore.github.io/RFC2616-ja.html ããã«å¤æ´ããå¿ è¦ãããã, print "Content-Type: text/html; charset=Shift_JIS\n"ãããªã©ã«ãªã£ã¦ããå ´å㯠ãããé¿ããã«ã¯ãå ã« utf8::encode ãéãã¦ãã uri escape ãã¦ãã ããã メールのヘッダーを以下のようにして送ると件名の日本語がどうしても文字化けします。本文はしません。アウトルックエクスプレス6.0では文字化けしません。YahooWebメールは文字化けしました。 3 / クリップ メールフォーム用に書き直してみたものです。 https://www.seohacks.net/blog/seo-tech/1147/ To: $u...続きを読む, 私もサブジェクトが文字化けしてしまい苦しみました。 ãã£ã¦ Wide character in print at ï½ äºã ã¨ããã¨ã©ã¼ãåºãæãããï¼, a) å¤é¨ããèªã¿è¾¼ãã å ¨è§æååã«ã¯ãã©ã°ãä»ãã¦ããªãã®ã§ utf8::decode($str) 颿°ãéããã¨ã«ãã£ã¦ãã©ã°ãä»ãã¦ããå¿ è¦ããããå¤é¨ããã®æååã¨ã¯ãããã¹ããã¡ã¤ã«ããã¼ã¿ãã¼ã¹ããèªã¿è¾¼ãæååããã©ã¦ã¶ã®ãã©ã¼ã ããé£ãã§ããæååãªã©ã®ãã¨ã, ãâã¹ã¯ãªããå é¨ã§å®ç¾©ããæååã«ã¯èªåçã«utf8ãã©ã°ãä»ãã®ã§ä¸è¨ã®ãããªå¦çã¯ä¸è¦ã ï¼ä¾ï¼$str="ãiuãã"; â ããã ãã§ãã©ã°ãã¤ãï¼, b) 2.ã®bã§èª¬æããããã«ã¢ã¦ããããæã«ã¯ãã©ã°ãå¥ããå¿ è¦ãããã, ãâ»æååã«ãã©ã°ãä»ãã¦ãããã©ããã®ç¢ºèªã¯ utf8::is_utf8($str) 颿°ã§å¤å¥å¯è½ ï¼ãã©ã°on/off â æ»ãå¤ãç/å½ï¼, a) ããã¹ããã¡ã¤ã«ããã¼ã¿ãã¼ã¹ããå ¨è§æåãå«ãæååãèªã¿è¾¼ãã¨ãã¯ãèªã¿è¾¼ãã ç´å¾ã« utf8::decode 颿°ãéãã¦ãã©ã°ãä»ãã¦ããã(3.ã®a), b) æ²ç¤ºæ¿ãªã©ã