- ベストアンサー
UTF-8対応のCGIを作成するには
今回、初めてUTF-8対応のCGIを作成しようと考えています。簡易掲示板型のものです。 (過去にはShift-JISのものを作成したことがあります) 現在いろいろ調べているところですがいまひとつ理解できていません。 使用するファイルは [A] 入力用&出力用HTML [B] データファイル (.txt) [C] CGI (Perl) 処理するデータは [1] HTML内フォームから入力されたデータ [2] データファイルから読み込んだデータ [3] データファイルに書き込むデータ ([1] をデータファイルに追加書き込み) [4] HTMLに出力するデータ ([1] と [2] を組み合わせて作成) ファイル3つをUTF-8Nで作成し、HTMLでcharsetをUTF-8に設定すればよいらしいことはわかったのですが、 CGI内では何を設定しておかなければいけないのでしょうか。 また、UTF8フラグなるものが存在するようですが、データ[1]~[4]のうち ・初期状態でUTF8フラグがつくもの/ないもの ・処理時にUTF8フラグの追加/削除をしなければいけないもの はどれなのでしょうか。 ご教示いただければ幸いです。
- Nao_F
- お礼率48% (15/31)
- CGI
- 回答数2
- ありがとう数1
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>初期状態でUTF8フラグがつくもの/ないもの いずれもUTF8フラグはつきません。単なるUTF-8のByte列ですから。 >処理時にUTF8フラグの追加/削除をしなければいけないもの データをUTF-8のByte列として扱えばいいのなら単純に読み書きするだけです。UTF8フラグを考える必要はありません。 そうではなく,連続した複数Byteの固まりを「文字」として扱いたいのだ,というニーズがあるのなら,入力したデータにUTF8フラグをつける/UTF8フラグを取ってデータを出力,という方法をとるのがもっともスマートです。 http://okwave.jp/qa4413021.html の私の過去の回答 ANo.3 および,上記からさらにリンクでたどることができる私の過去の回答を参照。
その他の回答 (1)
- SAYKA
- ベストアンサー率34% (944/2776)
perlのversionを調べた方が良いよ http://www.google.com/search?lr=lang_ja&q=perl%E3%81%AEversion%E3%81%AE%E8%AA%BF%E3%81%B9%E6%96%B9 versionによってやり方が変わるから。 勿論上位になる程簡単になるみたいだけど・・・ http://www.google.com/search?lr=lang_ja&q=perl%E3%81%A7utf-8
補足
すみません、忘れていました。 サーバーのマニュアルによれば「バージョン 5.8.x」とのことです。
関連するQ&A
- cgiプログラムについて
よろしくお願いします。 現在複数のページを作成しております。 一つはcharset=shift_jis">になっております。 もう一つはutf-8になっております。 charset=shift_jis">のページにメールフォームを使っていますが そのcgiをutf-8には使用できないのでしょうか? よろしくお願いします
- ベストアンサー
- CGI
- 文字コードsjisをUTF8に書き換えたい
CGIの勉強中の者です。 文字コードはSJISで保存しているCGIをUTF8コードに換えるには何が必要でしょうか? HTMLならmeta内をSJISからUTF8に変更し、TeraPadなどのテキストエディタでUTF8に保存すればオッケーなんですが。 CGIの場合はHTMLと違って、換えるには複雑なのでしょうか? CGIプログラムの中では以下の「sjis」を「UTF8」に書き換えし、UTF8で保存しましたけど、文字化けが出てます。 <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> &jcode'h2z_sjis(*contenido) &jcode'convert(*subject,'sjis'); &jcode'convert(*infor,'sjis'); &jcode'convert(*contenido,'jis'); &jcode'convert(*res_msg,'jis'); print "Content-type: text/html;charset=shift_jis\n\n"; 宜しくお願いします。
- 締切済み
- CGI
- 出力ページをUTF-8に
CGIは全くの初心者で、いくつかの配布されたCGIを利用しています。 今回、HTMLファイル、JavaScriptファイル、CSSファイルの全ての文字コードをShift JISからUTF-8に変更しました。 Perlで出力されるページの文字コードもUTF-8にしましたが、CGIの方ではShift JISの指定のままのようです。 出来れば出力されたページもUTF-8のままにしたいのですが、どうすればいいのでしょうか?
- 締切済み
- CGI
- shift_jisとutf-8
お世話になります。 先日より文字コードのことで、頭を悩ましています。 サイト制作の時に、フルCSSを目指し、他の人が作っていたCSSを利用してDreamweaverで制作を始めました。 その際、文字コードがutf-8になっていたのですが、ブラウザによっては文字化けしていおり、宣言の部分をshift_jisに変更しました。 この部分です。<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" /> ちなみにDreamwerverではデフォルトの文字コードはshift_jisなので、わざわざ変更しない限り、制作したページはすべてshift_jisで書かれているようです。 また、使わせてもらったCSSのページには一行目に@charset "utf-8";が入っていたのですが、よくわからないのでこの行をはずしてみたところ、CSSの設定が反映されない部分が出てきました。(これが原因かわかりませんが、この一行を入れると直ったみたいで・・) そこで質問なのですが、HTMLの方ではshift_jis、CSSファイルではutf-8という設定でも別にかまわないのでしょうか?(統一しなくてもいいのか?) また、一行目の@charset "utf-8";を省くと問題がありますか? 統一した方がいい場合は、制作したものをすべてutf-8に(またはshift_jisに)するにはどうしたらいいのでしょうか? 別に統一する必要がなければ今回はこのままにして、次回からきちんとしたものを作って行きたいのですが・・ どうぞよろしくお願い致します。
- ベストアンサー
- その他([技術者向] コンピューター)
- [transformNode]メソッドについて
VB6で開発中のシステムで、"MSXML.DOMDocument"のXMLファイルとXSLファイルをtransformNodeメソッドでHTMLファイルを生成して、エクセル2003で開いています。 データの内容によるのですが、日本語がきちんと表示されるときとされないときがあります。 transformNodeメソッドで作成されたHTMLファイルの中身を見てみると <META http-equiv="Content-Type" content="text/html; charset=UTF-16"> の行で[charset=UTF-16]を[charset=Shift-JIS]に変更するとどちらも問題なく表示されることが分かりました。 HTMLファイルを生成する際に[charset=UTF-16]の部分を[charset=Shift-JIS]に指定する方法は無いでしょうか? よろしくお願いします。
- ベストアンサー
- XML
- Shift_JISでコーディングされたものをUTF-8にして移設したい
Dreamweaverで昔作ったShift_JISコードのHTMLファイルが幾つかあり、それらをHTMLも組み込めるCMS的なシステムに移そうとしたところ、コードをUTF-8で作る必要があったため、 <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> に変更してみましたが、レイアウトが崩れまくってしまいます。 ブラウザで再度Shift-JISを選択しなおすとちゃんと表示されるのですが‥。 これを解決する方法はあるのでしょうか。。それとも一からUTF-8として作り直した方がよいのでしょうか‥。 宜しくお願いします。
- ベストアンサー
- HTML
- utf8フラグを外すと、日本語が化ける
MySQLにPerlから登録させるプログラムを書いていて文字コードでハマってしまいました。 HTMLからpostされたデータを登録しても、そのまま日本語で保存されるのですが、以前に書き出しておいたデータファイルから読み込んだ文字が文字化けしてしまいます。 もちろんデータファイルはutf8で保存されており、またpostされたデータもutf8です。 そこで、utf8フラグのあたりが怪しいのでは、、と思い調べたところ、 postされた文字列はフラグなしのutf8、データファイルから読み込んだ文字列はフラグ付きのutf8でした。 それならばと、utf8::decode($str);をしてみたのですが、フラグは取れたものの肝心の文字列が文字化けしています。 文字化けした文字は、MySQLに化けて登録されたものと同一の化け方でした。 この状態で、どうすれば化けさせずに登録させられるでしょうか? Perlのバージョンは5.8.8です。 スクリプト自体もutf8です。 もし分かる方がいらっしゃればご教授願えると嬉しいです。
- ベストアンサー
- Perl
- 「 <!--#exec cgi="***.cgi" --> 」が表示されません
「main.cgi」というファイルを作り、単純にHTMLを表示するだけのCGIファイルを作成しました。 こんな感じ ------------main.cgi------------ #!/usr/local/bin/perl print "Content-type:text/html\n\n"; print <<EOM; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title></title> </head> <body> <略> </body> </html> EOM __END__ -------------------------------- それで、ほかのHTMLファイルに <!--#exec cgi="main.cgi" --> と入力してそのページを見てみると、 [an error occurred while processing this directive] 上の文章が表示されていました。 どうすれば「main.cgi」の内容を表示することができるのでしょうか? よろしくお願いします。
- ベストアンサー
- Perl
- Hyper Estraierのcgiが結果表示をしてくれません。
Windows2000サーバー・Apache2.0で動作しているHyper Estraierのcgiを、設定ファイルやインデクスともどもWindows Server2003のIISのサーバに移動したところ、cgiにアクセスしても、結果表示に何も表示されません。 (真っ白で、ソースを見ると <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META http-equiv=Content-Type content="text/html; charset=shift_jis"></HEAD> <BODY></BODY></HTML> とのみ出力。) 試しにテスト用のcgiを同じところにおいてみたら、そちらは動作するのですが・・・ 考えられる原因は何でしょうか?
- 締切済み
- CGI
- Perlのcgiを中国語で表示可能にしたい
OS:Windows7でサーバーはロリポップを使用しております。 Perlのcgiを「utf-8」で保存し、Perl内のhtmlも、「<meta http-equiv="Content-Type" content="text/html; charset=utf-8">」などのutf-8の設定にしていますが、ffftpでutf-8の文字コードで転送すると、「※CGI もしくは SSI が正しく動作していません。」と表示されてしまいます。 ffftpのホストの設定での、文字コードは「ホストの漢字コード Unicode(UTF-8)」、「ファイル名の漢字コード Unicode(UTF-8)」にしています。 何パターンか試してみましたが、ffftpの転送時の設定が「Unicode(UTF-8)」だと、「※CGI もしくは SSI が正しく動作していません。」と表示されるみたいです。 転送時の設定を「ホストの漢字コード 無変換(SHIFT-JIS)」、「ファイル名の漢字コード SHIFT-JIS」 にすると、cgiは動作します。但し、文字化けします。→ 黒い菱形に?マークの文字化け。 どうすれば、上記問題を解決できるでしょうか。 アドバイスをお願いします。 m(_ _)m
- ベストアンサー
- Perl
お礼
遅くなってしまいすみません。 CGIは無事完成いたしました。 当初調べていたときには use utf8 だの use Encode だの色々出てきて 少々混乱していました。 最終的にはプログラム内にマルチバイト文字がまったく登場しないことから エンコード操作系の処理は一切入れませんでしたが、正常に機能しています。 どうもありがとうございました。