• ベストアンサー

CGI(Perl)の文字化けについて

gadgetwatchの回答

回答No.1

フォーム画面およびCGIともにEUCなら、全角スペース関連で化けるということはあまりないような気がします。 CGI側でフォームから送られたデータを変数に格納している部分があると思いますが、そのライブラリなどは何をお使いですか?そのあたりからヒントが得られるかもしれません。 まずは全部でなくていいので、入力データのデコード部分と実際の表示部分のソースを見せていただくことは可能ですか?

noname#223023
質問者

お礼

gadgetwatchさん ご返答ありがとうございました。 全角スペースの後にカタカナ、 半角スペースの後にカタカナ、 スペース無しの後にカタカナ で調べてみたら、全角スペースの後にカタカナの時のみ文字化けしていました。 日本語処理ライブラリはJcode.pmを使っています。 デコード部分です。 $val =~ tr/+/ /; $val =~ s/%([0-9a-fA-F]{2})/pack("C",hex($1))/eg; if($opt){ #英数字全角半角処理 $a = qr{(?<!\x8F)}; $b = qr{(?=(?:[\xA1-\xFE][\xA1-\xFE])*(?:[\x00-\x7F\x8E\x8F]|\z))}x; $val =~ s/$a\xA3([\xB0-\xB9\xC1-\xDA\xE1-\xFA])$b/pack("C", ord($1) - 0x80)/oeg; #全角半角処理 $val =~ s/\@/\@/g; $val =~ s/\./\./g; $val =~ s/\_/\_/g; $val =~ s/\-/\-/g; 表示部分は、 &Jcode::convert(\$text, 'euc'); HTMLに加工したものをEUCにして表示するようにしています。 (あまり必要ないかもしれませんが。。) これで足りますでしょうか。 よろしくお願いいたします。

関連するQ&A

  • .cgi でタグが勝手に変換されました。文字化け?でしょうか?

    .cgi でタグが勝手に変換されました。文字化け?でしょうか? Firefoxブラウザで表示すると、変になりました。 ブラウザでのソースをみると、一部だけが文字化けしていました。 実際のソースは問題ありません。 何故、ブラウザが正しく表示されないのでしょうか? ------------------ #! /usr/bin/perl print <<HTML; からHTMLを挿入しました。 <strong>全角スペースの後にTV</strong> の TV</ の部分だと思いますが消えて、 当然、その後の文字が全部太字(<strong>)が適応されちゃいました。 全角スペースを使ってはいけないのでしょうか? 何故こうなっちゃったんでしょうか? 他の全角スペースは問題ありませんでした。

    • ベストアンサー
    • CGI
  • cgiスクリプトの文字化け

    既存のCGIライブラリ(cgi-lib.plとjcode.pl)を用いて、登録フォームを作りました。しかし、「入力」を押して、CGIを作用させると、文字化けがおこってしまいます。 cgiのなかで、文字コードをeucに変換しています。(jcode::convert機能)サーバーのCGI設定は全て確認しましたし、パーミッションも確認しています。文法などはあってると思いますし、ディレクトリ、文字コード(euc)・改行コード(LF)も確認しています。 他に原因があると思うのですが、回答よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • PerlのCGIで全角スペースを入れて

    PerlのCGIで全角スペースを入れて print <<HTML; <p>完了  ボタン  次へ<br> <input type="submit" value=" 完了 &gt; "></p> HTML 隙間をあけて見やすくするのに全角スペースを入れていますが ブラウザで表示したときに(charset=Shift_JIS") どんな時に文字化けするのか忘れたのですが どんな時に文字化けするのでしょうか?

    • ベストアンサー
    • CGI
  • 「塙」と言う文字が文字化けしてしまう

    表題の件で質問させて下さい。 PHPで文字コードをEUCにしたwebアプリケーションを構築しております。 特に何の問題もなく動いていたと思っていたのですが、フォーム等で「塙」と言う文字を入力して、submitした値を表示させると文字化けしてしまいます。 これを表示させるには、どのような対処を行えば良いのでしょうか? いろいろと試してみた結果、 「塙あ」のように、後ろに全角文字が入るとキチンと文字化けせずに表示されるのは確認しました。 (「塙1」のように後ろに半角文字があると「?1」になってしまいます) どなたか対策をご存知の方、いらっしゃいましたらご教授お願いします。 下記の対策は行っています。 ・header("Content-type: text/html; charset=EUC-JP"); ・<meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> ・ファイルをEUC-JPで保存

    • ベストアンサー
    • PHP
  • CGIから出力される文字が化けて表示される

    メールフォームのCGIが出力するHTMLがブラウザで正常に表示されません。 HTMLで書いたメールフォームから、CGIを使って指定メールアドレスに文面を送信するページを作っています。 CGIとメールフォームは、ページを設置するレンタルサーバのサポートから入手した、公式のバージョンに手を加えて使っていますが、動作中に表示されるページの一部が文字化けする障害が発生してしまいます。 状況は下記の通りです。 1.フォームの送信ボタンを押すと、内容確認を促すページにジャンプ、もし入力漏れがあれば   警告ページにジャンプするのですが、どちらにジャンプしても表示が化けてしまいます。 2.文字コードを確認すると、CGIから出力されたHTMLが欧文(ISO)形式として認識されています。 3.CGIと、呼び出しに使っているHTMLはEUC形式で保存されているので、表示モードをEUCに   切り替えると、正しい内容で表示されます。   また、実際にメールを送信すると、受信メールも正常に送られています。 4.送信が正常に済むと、その旨を確認するページが表示されるのですが、そのページは正しく   表示されます。(文字化け表示のまま遷移しても、正しく表示されます) 5.文字化けしているページのソースを確認すると、一応charasetでコードがEUCに定義されている   ようなのですが、ブラウザ側では認識されていないようです。 画面の遷移を整理しますと、【フォーム】>【確認/警告】>【送信完了確認】となりますが、真ん中にある「確認/警告」の両ページのみが文字化けする、という感じです。 何か対応方法をご存知でしたら、ご教授頂けますでしょうか。 よろしくお願い致します。

    • 締切済み
    • CGI
  • 文字コードEUCのPerlプログラムが文字化けしてしまいます

    Perlで書かれたCGIを実行しようとしているのですが、プログラムはEUCで記述されているそうです。nkf -g ***とするとEUC-JPとなります。 print " <META http-equiv=\"Content-Type\" content=\"text/html; charset=EUC-JP\">\n"; とも記述されているのですが、ブラウザで実行(閲覧)すると文字化けして、ブラウザのエンコードは、Unicode(UTF-8)になっています。 ちなみに、OSはCentOS5.2です。 どうやったら、EUCで記述されたCGIが文字化けせずに実行できるのでしょうか? teratermでサーバに接続語、viコマンドで表示しても文字化けしています。ファイルの文字コードをEUCからUTF-8にして(nkf -w ***)、ブラウザでアクセスしても文字化けしてしまいます。

    • ベストアンサー
    • Perl
  • CGIプログラムを使った申し込みフォームをHTML形式のメールで送りました。ソースを開くと文字化けしてしまいます。

    CGIプログラムを使うことにより、WEB上から申し込みフォームを使って入力事項をHTML形式によりメールしました。しかし、ソースを開いてみると文字化けしています。 CGIプログラムは、Shift JIS で保存したものを送信しているのですが。。 どうすれば、文字化けしない、きれいなソースが見れるようにできるでしょうか?

    • ベストアンサー
    • CGI
  • 自作cgiのページがIE10で文字化けする

    Perlでcgiのページを作っています。文字コードはEUCです。 最近、IEのバージョンを8から10にアップグレードしたのですが、 自分の作ったページが、たまに文字化けするようになりました。 IE10のエンコード設定は「自動選択」にしていますが、 自動で「西ヨーロッパ言語(ISO)」に判断されてしまいまうことがあります。 Perlのcgiの文字コードはEUCで、ソースには以下のようにEUC-JPを指定しています。 <meta http-equiv="Content-Type" content="text/html;charset=EUC-JP"> 手でIE10の文字コードをEUCに設定すれば文字化けは直るのですが、 数日経つとまた同じように文字化けで「西ヨーロッパ言語(ISO)」に自動判断されてしまいます。 metaでEUC-JPをしていればブラウザ側で自動判断してくれると思っていたのですが、違うのでしょうか? HTMLでmeta以外に文字コードを指定するところがあるのでしょうか?

    • ベストアンサー
    • Perl
  • メール送信後のHTMLが文字化けします

    FORMからsendmailを利用してメールを送信し、その結果を「送信できた」、「未入力項目がある」などを出力するHTMLとして出力するcgiを作ったのですがHTML出力が文字化けします。 メールのsubjectやbodyは文字化けせず正常に送信できます。HTMLにはMETAタグでeuc-jpやshift_jisと色々とトライしました。cgiもshift_jisとeuc-jp両方で試しましたがどちらも文字化けします。文字化けしているときにブラウザのエンコードで自動選択すると、ブラウザがcgiの使用コードに自動的に合わせてくれて正常に表示してくれますがこれがcgiを起動するたびで面倒です。エンコードを自動選択しないと文字化けしてそのときのブラウザが選択している文字コードは「西ヨーロッパ言語(ISO)です。 どうしたらブラウザに使用している文字コードを認識させるられるでしょうか?

    • ベストアンサー
    • CGI
  • DreamWeaverでEUCが文字化けする。

    DreamWeaverを使ってホームページを作っています。 最初S-JISでHPを作っていたのですが、CGIページを作る際にEUC-JPの方日本語の文字処理上都合が良かったため、CGIページをEUC-JPにしました。 そこで今までDreamWeaverで作った他のページもテキストエディタで 文字コード EUC-JP、 改行コードをUNIX形式、 HTML中のcharset=EUC-JP にしたのですが、今度はDreamWeaver上で日本語が文字化けするようになってしまいました。 DreamWeaverで普通にEUC-JPが文字化けせずに表示させるには一体どのようにしたらよろしいのでしょうか。 ご存知の方がいらっしゃいましたら教えて下さい。 よろしくお願いします。