• ベストアンサー

HTMLのFORMで入力された文字を、データに保存後、再度表示すると文字化けが。

HTMLのFormから日本語文字を入力し、一旦データに保存し、再度PerlからHTML出力すると 一部の文字が文字化けします。(パソコン→パRン) どうしたら解決できるか教えてください。 入出力側Windows サーバー側UNIX スクリプトUNICODE CRです。perl V5.0

  • Perl
  • 回答数4
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • Dpop
  • ベストアンサー率51% (279/544)
回答No.1

スクリプトをSJISで書いていますね。それが原因です。 「ソ」の2バイト目に、「\」と同じコードが入っているため、「コ」の1バイト目をエスクケープシーケンスとして取り込んでしまったため、文字化けを起こしました。 CGIは、EUCで記述しなければならない。みたいな記述を読んだことがありませんか? UNIXの内部漢字コードはEUCです。ですので、CGIもEUCで記述する必要があります。 そう言う意味では、文字化けしたことが、UNIX的には正常な動作。といえます。

ctpsys
質問者

お礼

Dpop様 お世話になっております。 お陰様で、上手く作動できました。 スクリプト、データファイルを全てeucに直しHTMLに表示する直前に呼び出したデータを jcode::convertで変換するなどして(これは必要なかったかもしれませんが)処理できました。 スクリプトが全てSjisに変換するよう処理していましたので、修正するのに手間取りました。 また、データが一度でなぜか変換できず、2回同じことを繰り返して、変換できたりと、 初心者なので、苦労しました。 (jcode::getcodeで結果を見ながらでしたので) >CGIは、EUCで記述しなければならない。みたいな記述を読んだことがありませんか? 確か読んだことがあります。 もっと勉強します。ありがとうございました。

その他の回答 (3)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.4

nkfコマンドでSJISからEUCに変換できます。 詳しくは、man nkfと入力してみてください。

ctpsys
質問者

お礼

tatsu99 様 お世話になります。 Dpop 様のご指摘で早速作業していまして、お返事が遅れました。 今回はjcode::convertを使いましたが、多分nkfを使ったほうが、処理的にははやいでしょうね。 これから練習してみます。ありがとうございました。

  • Dpop
  • ベストアンサー率51% (279/544)
回答No.3

つづけて #1 です。(一度で書け<自分) 今、「パソコン」のUTF-8のコードを調べてみました。やはりビンゴでした。 パ : 8370 ソ : 835C コ : 8352 ン : 8393 ソの2バイト目に \ が入っていますね。 Encode.pm などで、一度適当な文字コードに変換されてから、次の処理をさせてはいかがでしょうか?

ctpsys
質問者

補足

早速ご返事いただきましてありがとうございます。 私の間違いでS-JISでした。 今、エディターで変換して確認使用としています。 Perl内の日本語が全て文字化けして、直さなければならないようです。 結果お知らせまで時間をちょうだいいたします。

  • Dpop
  • ベストアンサー率51% (279/544)
回答No.2

#1 です。 UNICODEでしたね。はやとちりしました。 理由は、やっぱり \ だと思います。使用している UNICODE は UTF-8 ですか? UTF-7 ですか?

関連するQ&A

  • HTMLの文字化けについて

    HTMLの文字化けについて クライアントPC(WindowsVista)で作成したHTMLファイルをサーバ(CentOS5.4)にアップして、ブラウザから確認してみたところ、文字化けを起こしてしまいました。 ローマ字は問題ないのですが、日本語が文字化けしてしまっており、表示がめちゃくちゃになってしまっています。 HTMLはK2Editorにて作成して、文字コードはShift-JIS、改行コードはCRLFとしております。 しかし、文字化けした状態でブラウザの文字エンコーディングをEUC-JPに変えて再度読み込んでみたところ、文字化けせずに表示されます。 サーバ側の文字コードは、 # vi /etc/sysconfig/i18n LANG="ja_JP.EUC-JP" と設定し、デフォルトのUTF-8からEUC-JPに変えております。 なので、もしかしたらサーバ側の文字コードとHTMLの文字コードが何か関係しているのかと私は思うのですが・・・ 文字化けの原因がお分かりになる方いらっしゃいましたら、ご教授のほどお願い致します。

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

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

    • ベストアンサー
    • CGI
  • FORMからの文字入力文字化け

    「.htaccess」で設定した場合、正常に動作するのですが、「自作スクリプト内」でPHP環境を設定すると文字化けします。 フリーの掲示板が「.htaccess」で設定した場合、文字化けしますので、自作スクリプトも今回からスクリプト内部からPHP環境を設定し動作確認をしています。 FORMからの文字入力だけが文字化けしてしまうのですが、解決方法が見出せずに困っています。 また、「mbstring.encoding_translation」の設定方法がわからずに設定していないため、入力文字化けするのでしょうか。 表示だけは、文字化けせずに表示されます。FORMからの入力文字だけが文字化けします。 解決方法をご存知の方がいらっしゃいましたらご教授のほど宜しくお願いします。 # .htaccessで設定する場合 php_flag output_buffering "On" php_value output_handler "mb_output_handler" php_value default_charset "Shift_JIS" php_value mbstring.language "Japanese" php_value mbstring.internal_encoding "EUC-JP" php_value mbstring.http_input "auto" php_value mbstring.http_output "SJIS" php_value mbstring.detect_order "auto" php_flag mbstring.substitute_character "none" php_flag mbstring.encoding_translation "On" # 自作スクリプト内で設定する場合 ini_set("output_buffering", "On"); ini_set("output_handler", "mb_output_handler"); ini_set("default_charset", "Shift_JIS"); mb_language("Japanese"); mb_internal_encoding ("EUC-JP"); mb_http_input("auto"); mb_http_output("SJIS"); mb_detect_order("auto"); mb_substitute_character("none"); ob_start("mb_output_handler");

    • 締切済み
    • PHP
  • HTMLから入力される文字コードについて

    HTMLにテキストボックスを配置し、入力された値をアプリケーションサーバ上(Java)で処理するというアプリを作成しているのですが、テキストボックスに環境依存文字(Unicode)とShift-JIS文字が混在した場合にHTTPRequest内が文字化けしてしまいます。 環境依存文字が入力されたかどうかはサーバー側では判別不明(既に文字化けしてるため)なんですが、一般的にはどう処理しているのでしょうか??

  • ワードの特殊文字をHTML表示にしたい

    ワードの、 → ← 上記で1文字の記号を表示させたいです。 しかし、ユニコード変換する際に文字をはりつけると、 □になり文字化けするため、変換もできません。 この記号はHTML表示できないのでしょうか?

  • HTMLファイルの文字化けについて

    ある会社のサーバーホスティングで、Webサーバ(Linux + Apache)を使っています。 最近になって、たまに文字化けが発生するようになりました。 【現象】 ・文字の一文字だけ化ける。 ・ブラウザの表示だけでなく、HTMLファイルに記載した文字も化ける。 ・同じ箇所が何度も化けることがある。 ・半角文字、全角文字、記号、、、など関係なく化ける文字は異なる。 スクリプトなども使っておらず、質素なHTMLだけのページで、HTML内に文字コード(Shift-JIS)の宣言もしていますが、突然化けが発生するので困っています。 何か原因のわかる方いらしゃいますでしょうか?

  • 違う文字コードのページへFORMデータを送る時

    いつもお世話になっております。 EUC-JP のページからx-euc-jpのページへFORMを使いデータを渡しているのですが、どうも受け取り側で渡したデータが文字化けを起こしているようなのです。 原因が分かる方がいたら、ご教授下さい。 <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" /> <script type="text/javascript"> <!-- function sent2() { document.INPUT.submit(); } // --> </script> </HEAD> <BODY onload="sent2()"> <form name="INPUT" METHOD="POST" action="http://okwave.jp" ENCTYPE="text/plain"> <input type="hidden" name="arr1" value="555006303003"> </form> </BODY> </HTML>

  • 文字化け

    CGIの中に文字をして、 サーバーにアップして、アクセスすると、 ある一部のカタカナと漢字が文字化けを起す事があります。 例えば【ソ】【表】 文字化けをした場合、スクリプトを再度開きその部分の後ろに【\】をつければ解消する事は解っているのですが、 いちいちサーバーにアップして見なければ、 文字化けがおきているかどうか解らないので、 文字化けをおこす文字リストなどがあれば、 アップする前に対処できるので、 そう言ったリストはありませんでしょうか? 探して見てるのですが、なかなか見つかりません。

    • ベストアンサー
    • CGI
  • 初心者で、困っています。(文字化け)

    すみません、すごく初歩的なことで困っています。 本を見ながら、下のようなものを書いたのですが、 出力すると、文字化けをしてしまいます。ウィンドウズの環境で、Perlは5.8を使い、読み込みのテキストはUnicodeです。どのようにすれば、文字化けをしないで、読み込めるのでしょうか。 open ( IN , "LBa3_00028.txt" ) or die; open ( out , ">out.txt" ); while ( $line = <IN>){ print out "$line\n"; } close(out); close(IN);

    • ベストアンサー
    • Perl
  • Internet Explorerで文字化けする

    一部のサイトで文字化けします。 とりあえずYouTubeとAmazonです。 Internet Explorerの「表示」→「エンコード」を開くと「シフトJIS」が選ばれています。「Unicode(UTF-8)」にすると正常に表示されます。 他のサイトでは最初から「Unicode(UTF-8)」が選ばれており、文字化けなどせず正常に表示されます。 たぶんサイト側ではなくこっちのPCの問題だと思い、今のところYouTubeとAmazonには問い合わせていません。 Windows 7 Home Edition SP1,Internet Explorer 11.0.14です。 YouTubeとAmazonも他と同じように最初から「Unicode(UTF-8)」が選ばれるよーにすりゃあいいんだと思いますが、ネットでちょっと探してみた程度では、どうもサイトを作る側とか、メールを読む方法しか見つかりません。 どーしたらいいんでしょう。 おしえて、偉い人!!!

専門家に質問してみよう