• 締切済み

携帯電話でCGIのファイルを読むと文字が・・・

携帯電話で読めるようなホームページを作っています。 ところが、FORMでCGIファイルを見に行くと、日本語が文字が化けます。 CGIファイルはPERLですが、UNIXサーバでPERLスクリプトをSHIFT JISで書くとうまく動作しないことがある、と、手持の本には書いてありました。 みなさんは、どの様にされておられるのでしょうか? あるいは先の本に書かれていることは昔の話しで、今はUNIXのPERLでもSHIFT JISとCR+LFでスクリプトを書いても問題ないのでしょうか? よろしくお願いします。

  • CGI
  • 回答数4
  • ありがとう数0

みんなの回答

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.4

>> シフトJISにはその他にも色々な問題点がありますので、面倒がいやな場合はスクリプトをEUCにし、表示の際にシフトJISに変換するとよいでしょう。 > 上記のヒントなどをいただければありがたいです。 文字コード変換用のライブラリとしては jcode.pl がもっとも有名だと思われますので、そちらを紹介しておきます。 jcode.pl の最新版は下記から入手できます。 http://www.srekcah.org/jcode/ jcode.pl の利用方法については、こちらで詳しく解説されています。 http://www.mikeneko.ne.jp/~lab/kcode/jcode.html 実現方法としては、表示するHTML全体を1つの変数(例えば $html など)に格納し、表示の直前に jcode::convert を通す、のような案が考えられます。 変換の部分は次のような感じになるでしょう。 jcode::convert(\$html, "sjis", "euc"); print "Content-Type: text/html; charset=Shift_JIS\n\n"; print $html;

参考URL:
http://www.srekcah.org/jcode/,http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.3

今も昔もOSにも関係なく、シフトJISで何も考えずにスクリプトを書けば問題が起こる可能性があります。 (使ったことがありませんが、JPERLでは大丈夫だそうです。) ただしこれは、シフトJISの文字コードに関するクセを熟知した上でコーディングすれば、何ら問題はありません。 また、UNIXの改行コードは「LF」であり、「CR+LF」で通用するようになることはないでしょうから、改行コードに関しては必ず LF にするようにしてください。 文字化けすると言うことですが、例えば「表示」や「予定」という文字列は、それぞれ「沸」「苓」のように表示されてしまいます。 これはシフトJISでスクリプトを書く際の問題の一角で、「表\示」「予\定」のように化けてしまった2文字の間に半角の「\」を入れることで解消できます。 シフトJISにはその他にも色々な問題点がありますので、面倒がいやな場合はスクリプトをEUCにし、表示の際にシフトJISに変換するとよいでしょう。

chrilake
質問者

補足

ご回答いただき、ありがとうございました。 エスケープの使い方を丁寧に説明して頂き、何となく分かりました。 >シフトJISにはその他にも色々な問題点がありますので、面倒がいやな場合はスクリプトをEUCにし、表示の際にシフトJISに変換するとよいでしょう。 CGIをたまに使っている程度なので、命令など忘れがちです。 上記のヒントなどをいただければありがたいです。 指定により文字をEUCとかSHIFT JISに変換するライブラリは使用したことがあります。 宜しければ、お願い致します。 ありがとうございました。

  • Kirishima
  • ベストアンサー率32% (155/480)
回答No.2

主にシフトJISで作ってます。 化ける文字は\でエスケープしています。 文字列を操作する(検索・置換など)のはシフトJISではうまくいかないので、 一時的にEUCに変換して処理しています。

  • Seiryo
  • ベストアンサー率13% (27/203)
回答No.1

動かない場合は変換するよりないでしょう。

関連するQ&A

  • cgiがうごきません

    ApacheとPerlをインストールしてローカルでの動作確認OKなのですが、HP上では機能しません。 プロバイダー側が作った「アクセス権が認められてません ・・・どうたら、こうたら」のメッセージがでます。 すべてのファイル(cgi,html,pl・・)をEUC(文字)CR+LF (改行)にして、アスキーモードでアップロードしました。 Perlパスやパーミッションは間違いないとは思うのですが 、アクセスすると凄い文字化けになっています。掲示板は機能しません。FTPはFFFTPですので自動改行すると思うの ですが、コードの設定に関係があるのでしょうか? 私はWin98,プロバイダーはUNIX系です。それから、Apache とPerlを使ってエラーを調べられるようなことを聞いたの ですが、どのようにするのでしょうか?お願いします。

    • ベストアンサー
    • CGI
  • cgi(perl使用)でファイルを作る方法を教えてください

    こんにちは、 perlをやっています。 プロバイダ上にperlスクリプトを拡張子cgiでUPしています。 いまやりたいことがあるんです、それは ファイルをサーバ上の領域に作るというものです (ちなみにサーバの種類はUNIX系です) ファイルはゼロバイトの何も無いテキストファイルを作りたいんですが どのような関数を使えばファイルができるのでしょうか。 また、ファイルを作った後パーミッションの変更(chmodコマンドのような 動き)をする関数等があれば教えてください。

    • ベストアンサー
    • Perl
  • Windowsで書かれたCGIファイルのUNIX上での扱いについて

    もともとWindowの環境で書かれたCGIファイル(Perl)を LINUXで編集したいのですが、編集後、Internal Server Error がでています。 S-JISで書かれた日本語コメント部分はそのままにしているのですが、 これが問題なのでしょうか。 ちなみに、オリジナルのソースはftpでサーバーにあげ(使用環境は Apacheです)、きちんとCRは除去してあり、何もいじらない場合は 問題無く動作しています。 よろしくお願いします。

    • 締切済み
    • CGI
  • IISでCGIとしてのPerlが動かない

    Win2K ProにてIISでローカルサーバーでサーバーサイドスクリプトの勉強中です。 ASPは標準でついているので、PerlとPHPを組み込みました。 PHPは内部プロセス型ではなく、CGIバージョンですが、正常動作しました。 もちろんASPも。 それで問題なのですが、Perlがどうしても動きません。 PHPと同じように実行ファイルのパスや拡張子の設定はできているはずです。 しかし、いつまでたっても出力が出ず、2分くらいたってCGIタイムアウトとなってしまいます。 PerlにはActive PerlとCygwin付属のPerl両方試しましたが、タイムアウトです。 ファイルをコンソール上で実行してみましたが、Active PerlもCygwinのPerlも、期待通りの出力がなされています。 ちなみに、shファイルをCygwinのbashに関連付けて、実行させましたが、コンソール上での出力とはうらはらに、ブラウザ上ではやはりタイムアウトとなりました。 PerlのソースはいずれもほかのところのApacheでは動いているものです。 httpヘッダも正常です。 ソースの文字コードは英語のみ、EUC、改行コードcr+lf、lfのみなど、いろいろ試しましたがダメでした。 なにが原因なのでしょう。 IISを使っている方、アドバイスお願いします。

  • CGIファイル内の CGI呼出しのパスについて

    CGI 内からの .cgi ファイルの呼出しのパスについて質問があります。 動作環境は linux - apache - perl です perl の cgi ファイル内で次のように、同じ /cgi-bin ディレクトリ内の reset.cgi をコールしています。 ========== #!/usr/bin/perl (省略) if($form[0] =~ /reset/){ `reset.cgi`; } ========== バッククォートで実行していますが、これでは動作せず、 ./reset.cgi と ピリオド,スラッシュを前に付けると動作します。 少し調べた結果、カレントディレクトリのパスが通っていないのかと考え、 /etc/profile の PATHに下記のように ピリオド を追加してリブートしたところ、 export PATH=$PATH:. ホームディレクトリなどで作成した シェルスクリプトは ./ なしで動くようになりましたが、 /cgi-bin ディレクトリ内の前述のような呼出しは動作しませんでした。 後は httpd.conf などの編集が必要なのかもしれませんが、 良く分かりませんでした。 申し訳ありませんが、教えて頂けると助かります。 よろしく御願い致します。

    • ベストアンサー
    • CGI
  • UNIX系OSでのCGIの文字コード

    こんにちは。 分からない事があるので、質問させて頂きます。 UNIX系のOSで、 CGIにGET/POSTをかける時に、 CGIを呼び出すHTML文書がシフトJISで記述 してあれば、データをシフトJIS で送信して くれますか?? ヒントになるような事でも、何でもかまいませんので アドバイス&回答お待ちしております。 よろしくお願いします。

    • 締切済み
    • CGI
  • CGIエラー

    あるCGIを組んでてアップロードしたらエラーが出ました。 もちろんInternalServerErrorでerror.logには (8)Exec format error: exec of 'ほげほげ/test.cgi' failed Premature end of script headers: test.cgi とありました。(ほげほげは気にしないで^^;) ぐぐって見たものの原因はわからず、簡単なcgiをアップロードしてもこのエラーが出ます。 Shift_JISで改行コードLFにしてます。 ASKIIモードにしました。 ヘッダーも入れてます。 いろんな方法を試しました。 ちなみにレンタルサーバーで、CGIはOKです。 都合上期限がやばいので、すぐに回答お願いします!

  • 外部CGIファイルの読み込み

    アクションスクリプトで外部CGIファイルを読み込む動作を勉強中です。 色々なサイトや書籍を参考にさせて頂いているのですが、その中で読み込みファイルを"ファイル名+ランダムな数字"としているものがありました。 説明では、『ブラウザのキャッシュが使われない為、毎回違うデータを作成する』とあるのですがなぜこれで動作するのかが分かりません。 実際のスクリプト部分は… CGIFile = "test.cgi?" + Math.floor (Math.random () * 1000); myLoadVars.load (CGIFile); です。 これでは読み込み対象のファイル名が"test.cgi?319"などとなってしまうのでエラーとなるように思うのですが…。 実際、書き出してみると"Error opening URL"と出力されます。 ローカルサーバー(ActivePerl使用)で試してもCGIは読み込まれません。 ですが、レンタルサーバー上にアップしてみるとちゃんとCGIが読み込まれていました。 なぜこのようになるのでしょうか? ローカルサーバーとホストサーバーにアップした場合で結果が変わるのもよく分かりません。 他のCGIは動作するのでローカルサーバーの設定は合っていると思うのですが…。perlのバージョン等でしょうか?CGIは全くの初心者でその辺のことはまったく分からないのですが…。 『ブラウザのキャッシュが使われない為…』とありますがこの意図も掴めずにいます。 ご教授頂ければ幸いです。よろしくお願い致します。 環境はwindowsXP,Flash8as2.0です。

    • ベストアンサー
    • Flash
  • XサーバーでCGIを使うには??

    質問なのですが、CGIを使いたいなと思い、幾つかのサイトを 見て勉強していたのですが、どうにも上手くいきません。 私はXサーバーを使用しています。XサーバーでCGIちゃんと 使えるよっていう方がいらっしゃれば一層助かります!! サーバーに置いてある自分のCGIのファイルをクリックして 開くと背景が青緑?になってソースがそのまま表示されてしまいます。 ちなみに、CGIファイルは以下です。public_htmlの下のcgiというフォルダの下にtest1.cgiというファイル名で保存しています。 =======-===ここから================= #!/usr/local/bin/perl print "Content-type: text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>テスト</title>\n"; print "</head>\n"; print "<body bgcolor=\"#ffcccc\">\n"; print "これはCGIのテストです。\n"; print "</body>\n"; print "</html>\n"; (文字コードはShift_JISです。) ===========ここまで=============== .htaccessのファイルも、CGIのファイルと同じ階層に入れて います。以下がそのファイルです。public_htmlの下のcgiというフォルダの下に.htaccessというファイル名で保存しています。 ==========ここから================ AddType application/x-httpd-cgi .cgi<CR><LF> (最後の行は改行しています) (文字コードはShift_JISです。) ==========ここまで================ どうすれば良いのでしょうか??ご教授お待ちしております。

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

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

    • ベストアンサー
    • Perl

専門家に質問してみよう