• 締切済み

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

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

  • Ruby
  • 回答数2
  • ありがとう数0

みんなの回答

  • 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

  • Rubyでファイル転送

    Rubyでファイル転送のcgiを作成してみましたが動作しません。 実行後は選択したファイル(aa.jpg等)が作成されますが、 容量がゼロです。(FTPで確認) Apacheエラー------ undefined local variable or method `input'for main:Object(NameError) 変数nameはファイル名であり、c:\等は含まれていません。 ruby1.8.2------ #!/usr/bin/ruby -Ku print "Content-type: text/html\n\n" require "cgi" require 'net/ftp' input = CGI.new.params; cgi = CGI.new $name = input["name"][0] if input["name"][0] open("/home/movies/#{$name}","w") do |fh| fh.binmode fh.write imput['name'][0].read end end html------ <form action="***" method="get" enctype="multipart/form-data"> <input type="file" name="name" size="30"> <input type="submit" name="regist" value="選択"></form>

  • 住所録を作りたい

    『MySQL入門以前』という本をみながら住所録をつくっています。 1、htmlファイル データ登録画面用 ↓ 2、phpファイル データをMySQLデータベースに書き込み ↓ 3、phpファイル MySQLのテーブルから全体を読み出し の3つのファイルから構成しています。 データ登録画面で、全角文字『愛知県』をいれると データベースに新しいデータが追加されません。 半角英数字abcや123なら、新しいデータが追加されます。 どうしたら全角文字も対応させられるのでしょうか。 ファイルの一部 <form action="touroku.php" method="post"> <p>氏名:<input type="text" name="simei" size="40"></p> <p>郵便番号:<input type="text" name="yubin1" size="5">-<input type="text" name="yubin2" size="8"></p> <p>住所1:<input type="text" name="jusho1" size="50"></p> <p><input type="submit" value="登録"> <input type="reset" value="リセット"></p> </form> MySQL 5.0 PHP 5.2.5.5 apache 2.0.59 Windowes XP

    • 締切済み
    • PHP
  • if文を入れるとcgiが動きません。【Ruby】

    下記のプログラムは正常動作します。 #部、name1に文字列が入っていたら動作するプログラムを 追加すると、ブラウザが白紙になります。エラーなしです。 間違いを教えてください。このファイルはhoge.cgiです。 #!/usr/bin/ruby print "Content-type: text/html\n\n" require "cgi-lib" input = CGI.new #if name1 #print "name is ", name1 #end print <<-"EOB" <form method="POST" action="./hoge.cgi"> name<input type="text" name="name1" size="10"> <input type="submit" value="send"> </form> </body> </html> EOB

  • HPを作るにおいて全角・半角は関係ないですか?

    ヤフージオシティーズで携帯用(DOCOMO)のHPを作成しています。 (CSSは知識がないため使えないです) このとき、英数字や記号は全角の方がいいでしょうか? 半角だと文字化けするかも?と思い全角にしていましたが うっかり半角で表記した英数字も問題なく表示できました。 HPを作るにおいて全角・半角は関係ないですか? 何かわかる方よろしくお願いします。

    • ベストアンサー
    • HTML
  • Ruby1.9で全角文字を半角文字にうまく変換できません。

    Ruby1.9で全角文字を半角文字にうまく変換できません。 英数字までは以下のロジックでうまく出来たのですが、カナが正しく変換されません。 何か良い知恵をどうかご教示のほどお願いいたします。 ※★→←★の間の文字は半角カナです(ブラウザ上全角カナとなってしまうため、便宜上補足しました)。 moji = "イあ1Aa" moji.tr('a-zA-Z0-9ア-ン', 'a-zA-Z0-9★→ア-ン←★') 結果:★→ウ←★あ1Aa 何故か半角のイではなく半角のウとなってしまう。    ※アの場合のみ正しく半角のアに変換される。

    • ベストアンサー
    • Ruby
  • タイトルバーが全角表示になって見辛いので直し方を教えて下さい

    マイクロソフトアップデートをしたところ、タイトルバーに表示される英数字が以前まで半角表示だったのですが全て全角表示になっていました。 インターネットで開いたページの半角文字もほとんどが全角表示になってしまいました。 どのようにすればもとのように半角表示にできますか?

  • チェックボックスについて(ruby)

    cgiのプログラムでチェックボックスについてわからないことがあります。 今書いてある、プログラムだとすべての値を受け取ってしまいます。 選択されたものだけ表示させるようにさせたいと思っています。そのプログラムfor文で書いているのですが、どのように書いたらよいのでしょうか? 教えてください、お願いします! <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>プロフィール入力ページ</title> </head> <body> プロフィールを入力してください。<br> <form method="GET" action="http://profile2.cgi"> 名前: <input type="text" name="name"> <br> <br> 性別: <input type="radio" name="sex" value="男性">男 <input type="radio" name="sex" value="女性">女 <input type="radio" name="sex" value="その他">その他 <br> <br> 趣味: <input type="checkbox" name="hobby" value="映画">映画 <input type="checkbox" name="hobby" value="音楽">音楽 <input type="checkbox" name="hobby" value="スポーツ">スポーツ <input type="checkbox" name="hobby" value="料理">料理 <input type="checkbox" name="hobby" value="その他">その他 <br> <br> <br> <input type="submit" value="送信"> </form> </body> </html> #!/usr/local/bin/ruby print "Content-type: text/html; charset=euc-jp\n\n" $KCODE = "e" require "cgi" cgi = CGI.new namae = cgi["name"] sei = cgi["sex"] syumi = cgi.params["hobby"] ary = ["映画, ", "音楽, ", "スポーツ, ", "料理, ", "その他 "] str = ary[0] + " " + ary[1] + " " + ary[2] + " " + ary[3] + " " + ary[4] + " " syumi = "" for x in str syumi = syumi + x end print <<EOS <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>プロフィールの確認</title> </head> <body> 名前: #{namae} <br> <br> 性別: #{sei} <br> <br> 趣味: #{syumi} </body> </html> EOS 動作環境はruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux]になります。

    • ベストアンサー
    • CGI
  • Ruby1.9で文字列中の全角文字数を調べたい。

    Ruby1.9を使っております。 次のような全角、半角が混在した文字列があり、その文字列の中から、 全角の文字数、半角の文字数がそれぞれ何文字あるか調べる方法はありますでしょうか。 ■文字列例 "あいイウう" どうか良きアドバイスをお願いいたします。

    • ベストアンサー
    • Ruby
  • テキストボックスの初期値について

    テキストボックスを配置したのですが 「<INPUT type="text"・・・」 となっているためブラウザで入力するときに初期値が全角日本語文字になってしまいます。 半角数値しか入力しないテキストボックスなので初期値を半角数値(または英数字)にしたいのですが出来るのでしょうか? 検索などをかけて調べてみたのですがそれらしいタグが見つからなかったので質問させていただきました。

    • ベストアンサー
    • HTML
  • 半角英数字の判別

    お世話になります テキストフィールドにおいて半角英数字のチェックをしたいのですが・・・ 例えば『012ab』のような場合、 <script Language="JavaScript"> <!-- function checkText() { txt = document.myFORM.moto.value; if (txt.match(/[^a-z|^A-Z]/g)) alert("アルファベット以外が含まれてます"); } //--> </script> <form name="myFORM"> <input type="text" name="moto"> <input type="button" value="調べる" onClick="checkText()"> </form> では数字が入力されてるとalertされます function checkNum() { txt = document.myFORM.moto.value; for (i=0; i<txt.length; i++) { c = txt.charAt(i); if ("0123456789".indexOf(c,0) < 0) { alert("数値以外が含まれてます"); return; } } } //--> </script> <form name="myFORM"> <input type="text" name="moto"> <input type="button" value="調べる" onClick="checkNum()"> </form> ではアルファベットがあるとalertされてしまいます この2つをどのように組み合わせれば半角英数字以外であればalertされるようになるのでしょうか?

専門家に質問してみよう