• 締切済み

再投稿します。 rubyでHPを作ったけど・・

rubyの勉強を始めました。 ruby1.9.2をインストールし、サーバーはWindowsのxamppでapacheを入れました(自分のPC内)。 練習でWebページを作り、<form>で<input type="text" name="text1">のようなものを作り、適当な文字をいれて送信ボタンを押して受け取りページでその文字を表示させました。 半角英数字の場合はうまくいきましたが、全角(日本語)をいれると途端に動かなくなります。 受け取り側のページに何も表示されません。 初心者でよくわからないことが多く困っています。 よろしくご指導のほどお願いいたします。

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

eRubyはほとんど使ったことないので、詳細はわかりません。 この中でエラーになりそうなのは > def getSinitizedString(s) > return CGI.escapeHTML(s) > end と > "あなたは、\"" + s + "\"と書きました。" での、コードの未対応や不一致です。 ですので、コードの確認に # s = getSinitizedString(s) #コメントアウト msg = "あなたは、\"" # + s + "\"と書きました。" #+s以降をコメントアウト としておいて <%=msg %> → <% p __ENCODING__ #スクリプトのコード。-Ksが効いているかの確認 p s.encoding # 入力した文字列のコード。 p msg.encoding # スクリプトに直接書いた文字列のコード %> として、英数だけと日本語ありの場合でどうなるか実行してみてはどうでしょうか? これで全部同じようなら # s = getSinitizedString(s) #コメントアウト のコメントを取って再度確認してみましょう。 コードが合わないようなら、s.force_encoding()で強制的に変換する等の処理が必要でしょう。

参考URL:
http://doc.ruby-lang.org/ja/1.9.2/doc/spec=2fm17n.html
masatarojr
質問者

補足

ご連絡有難うございます。 上記の確認をやってみました。 最初の # s = getSinitizedString(s) #コメントアウト msg = "あなたは、\"" # + s + "\"と書きました。" #+s以降をコメントアウト は、英数の場合は表示されますが、日本語の場合は表示なし(白紙)の状態です。 次に puts __ENCODING__ #スクリプトのコード。-Ksが効いているかの確認 puts s.encoding # 入力した文字列のコード。 puts msg.encoding # スクリプトに直接書いた文字列のコード をコードに追加したところ、 英数半角の場合は Windows-31J UTF-8 Windows-31J となりました。 2番目の s がUTF-8になっています。このあたりが悪さをしているのですか。 日本語を入力した場合は、Windows-31J だけが表示され、残りは出てきません。 ruby内部でエラーをなってしまっていると思われます。 もう少しこちらでも調べてみます。 とりあえず状況を補足させていただきました。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

どう動かなくなるとか、どんなエラーになるとか、そういうあたりが無いとなんとも判断できません。 ありがちなのは ・いわゆるURLエンコード(%XX%XXって感じの)がそのままで処理されていない ・入力された文字コードとプログラム中の文字コードが一致しない ・Ruby1.9で変更された文字列の文字コードに関連する処理が適切でない というあたりだと思います。

masatarojr
質問者

補足

有難うございます。 もう少し詳しく状況をご説明します。 まずテキスト入力用HP(hello.html)を作ります(下記)。 <html> <head> <meta http-equiv="content-type" content="text/html; charset=shift_jis"> <title>Ruby!</title> </head> <body> <h3>Hello</h3> <p>フォームサンプル</p> <form method="post" action="helloa.html"> <input type="text" name="text1"> <input type="submit"> </form> </body> </html> また、受け取り用に helloa.html を作りました(下記)。 <% #!/Ruby192/bin/ruby -Ks require('cgi') # 無効化処理 def getSinitizedString(s) return CGI.escapeHTML(s) end cgi = CGI.new if (cgi.has_key?('text1')) then s = cgi['text1'] s = getSinitizedString(s) msg = "あなたは、\"" + s + "\"と書きました。" else msg = "" end %> <html> <head> <meta http-equiv="content-type" content="text/html; charset=shift_jis"> <title>Ruby!</title> </head> <body> <h3>Hello</h3> <p>フォームサンプル</p> <%=msg %> <form method="post" action="hello.html"> <input type="text" name="text1"> <input type="submit"> </form> </body> </html> そしてURLに http://localhost/ruby/hello.html をいれて表示します。 表示されたページのテキストボックスに、例えば abc を入れ送信ボタンを押すと Hello フォームサンプル あなたは、"abc"と書きました。 のように表示されますが、テキストボックスのところに漢字など全角文字を入力すると、真っ白のページしか表示されません。 このことでずっと悩んでおりました。 よろしくご教示のほどお願いいたします。

関連するQ&A