• ベストアンサー

A Href=~ で飛んだときに特定の漢字が文字化けるんです

LinuxマシンをサーバにしてJSPのウェブアプリケーションを構築しています。 サーバには OS : RedHat Linux7.3 DB : PostgreSQL7.3.2 etc : j2sdk1.4.2_04 jakarta-tomcat-4.1.30 開発側のクライアントマシンには OS : WindowsXP ProEdition etc : FTP,Telnetのソフトです。 今回のはDB内のデータを検索して表示する、というものです。 問題は、そのヒット件数の表示(Yahooなどの「次の20件」とか「1 2 3 ...」みたいな感じです。わかりにくいかな…?)に<a href ="~ >を使っています。 ですが、<a href = "~>で作ったリンクで飛ぶと、<a href ~>内につけた次に渡す値(「&book=本」とかです。)が次のページにいくと文字化けしてしまって検索が正常にできません。 ある漢字はちゃんと渡されたりはするのですが…。 (林はOKで東はだめでした。) JSPの最初の宣言部分でcharset=EUC-JPにしてます。metaでの指定もしています。 渡す変数(book)を book = new String(book.getByte("ISO8859_1"),"EUC-JP"); でEUCコードにしている…と思うのですが、うまくいきません。 どなたか助言をお願いします。

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

  • ベストアンサー
  • dayowl
  • ベストアンサー率56% (84/148)
回答No.4

#なんかサーバーの動作がおかしいです。 #もし二重書き込みしていたらごめんなさい。 すいません完全に私の説明不足です。 submitするというのはこういう方法のことでした。 <html lang="ja"> <head> <meta http-equiv="Content-Script-Type" content="text/javascript"> <script type="text/javascript"> <!-- function mySubmitAction(bookValue) { document.form1.book.value = bookValue; document.form1.submit(); } // --> </script> <title></title> </head> <body> <a href="javascript:mySubmitAction('ほげほげ')">ほげほげ</a> <form name="form1" acrion="index.jsp" method="GET"> <input type="hidden" name="book" value=""> </form> </body> </html> こうすると「ほげほげ」をクリックすると下記のようなリンクになります。 http;//~/inputjsp?book=%82%D9%82%B0%82%D9%82%B0 それと、URLEncoderとURLDencoderの使い方も、いい加減な書き方をしていました。 しかも、No.2の方法は今は推奨されない方法でした。 今は、エンコード/デコード共に引数2つ使います。 ホントすみません。m(_ _)m /* URLエンコードしたいとき */ String enc = "SJIS"; String inputStr = "あいうえお"; /*エンコードしたい文字列*/ try { Stinrg result = URLEncoder.encode(inputStr, enc); /* resultに"%82%A0%82%A2%82%A4%82%A6%82%A8"が入る */ } catch (UnsupportedEncodingException e) {} //デコードしてSJISにしたいとき String encodeStr = "%82%A0%82%A2%82%A4%82%A6%82%A8";/*デコードしたい文字列*/ try { String result = URLDecoder.decode(encodeStr, enc); /* resultに"あいうえお"が入る*/ } catch (UnsupportedEncodingException e) {}

参考URL:
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/net/URLEncoder.html
thinji
質問者

お礼

詳しい回答ありがとうございました! おかげでなんとか解決することができました。 今回、submitの方のやり方は使いませんでしたが、dayowlさんのおかげで新しい使い方を知ることができました^-^ また何かありましたらよろしくお願いします。失礼します。

その他の回答 (3)

  • dayowl
  • ベストアンサー率56% (84/148)
回答No.3

すいません完全に私の説明不足です。 submitするというのはこういう方法のことでした。 <html lang="ja"> <head> <meta http-equiv="Content-Script-Type" content="text/javascript"> <script type="text/javascript"> <!-- function mySubmitAction(bookValue) { document.form1.book.value = bookValue; document.form1.submit(); } // --> </script> <title></title> </head> <body> <a href="javascript:mySubmitAction('ほげほげ')">ほげほげ</a> <form name="form1" acrion="index.jsp" method="GET"> <input type="hidden" name="book" value=""> </form> </body> </html> こうすると「ほげほげ」をクリックすると下記のようなリンクになります。 http;//~/inputjsp?book=%82%D9%82%B0%82%D9%82%B0 それと、URLEncoderとURLDencoderの使い方も、いい加減な書き方をしていました。 しかも、No.2の方法は今は推奨されない方法でした。 今は、エンコード/デコード共に引数2つ使います。 ホントすみません。m(_ _)m /* URLエンコードしたいとき */ String enc = "SJIS"; String inputStr = "あいうえお"; /*エンコードしたい文字列*/ try { Stinrg result = URLEncoder.encode(inputStr, enc); /* resultに"%82%A0%82%A2%82%A4%82%A6%82%A8"が入る */ } catch (UnsupportedEncodingException e) {} //デコードしてSJISにしたいとき String encodeStr = "%82%A0%82%A2%82%A4%82%A6%82%A8";/*デコードしたい文字列*/ try { String result = URLDecoder.decode(encodeStr, enc); /* resultに"あいうえお"が入る*/ } catch (UnsupportedEncodingException e) {}

参考URL:
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/net/URLEncoder.html
  • dayowl
  • ベストアンサー率56% (84/148)
回答No.2

No.1さんのおっしゃる方法が正攻法ですよね。 私はちょっと違う方法を・・・ a href=.../index.jsp?book=~のようにパラメータを込みで渡そうとするときにはURLエンコードが必要になるんですが、 フォームをGETでsubmitしてやると、ブラウザ任せにできます。 例えば、 <from name="hoge" acrion="index.jsp" method="GET"> <input type="hidden" name="book" value=""> </form> というフォームを埋め込んでおいて、bookにパラメータを設定する仕組みにしてやって、 <a href="javascript:document.hoge.submit()">リンク先</a> とやると、ブラウザが勝手にURLエンコードしてくれます。 あまり参考にならないかもしれませんが。 ちなみに、URLエンコードはJAVAなら、URLEncoderとURLDencoderクラスがありますんで String decodeValue = URLEncoder.encode(encodeValue); String encodeValue = URLDecoder.decode(decodeValue); こんな感じで使えます。

thinji
質問者

補足

返事遅くなりましたが、回答ありがとうございます! 上記の方法なのですが、ほかの処理をするのにSubmitを使っているので今回は不適合でした。でもこれでURLエンコードになるってのはありがたい情報でした~m(_ _)m それで下記のURLエンコーディングを調べていたのですが、うまくいかないです…。dayowlさんのコピペだけではだめなんですか?(変数は変えてます) 自分ほとんどJavaわかってないですよね…もうしわけないですけれども、もう少し具体的にソースを書いてくれるとありがたいです。できればよろしくお願いします。

  • kosa
  • ベストアンサー率25% (379/1464)
回答No.1

<a href ~>で渡す値を一度、URLエンコードしてから渡してやるのはどうでしょうか? 受け取ったのに値にデコードで戻すのがいいと思います。 URLエンコードとは、「%dfef555%45」な記号や数値の羅列になりますが文字化けを回避できると思いますよ

thinji
質問者

お礼

回答ありがとうございます! これからURLエンコードについて調べてみます。 こんなに早く回答いただけて恐縮です。m(_ _)m

関連するQ&A