プロが教えるわが家の防犯対策術!

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コードにしている…と思うのですが、うまくいきません。

どなたか助言をお願いします。

A 回答 (4件)

<a href ~>で渡す値を一度、URLエンコードしてから渡してやるのはどうでしょうか?


受け取ったのに値にデコードで戻すのがいいと思います。
URLエンコードとは、「%dfef555%45」な記号や数値の羅列になりますが文字化けを回避できると思いますよ
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/06/11 11:18

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);
こんな感じで使えます。

この回答への補足

返事遅くなりましたが、回答ありがとうございます!

上記の方法なのですが、ほかの処理をするのにSubmitを使っているので今回は不適合でした。でもこれでURLエンコードになるってのはありがたい情報でした~m(_ _)m

それで下記のURLエンコーディングを調べていたのですが、うまくいかないです…。dayowlさんのコピペだけではだめなんですか?(変数は変えてます)
自分ほとんどJavaわかってないですよね…もうしわけないですけれども、もう少し具体的にソースを書いてくれるとありがたいです。できればよろしくお願いします。

補足日時:2004/06/15 16:34
    • good
    • 0

すいません完全に私の説明不足です。


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 …
    • good
    • 0

#なんかサーバーの動作がおかしいです。


#もし二重書き込みしていたらごめんなさい。
すいません完全に私の説明不足です。
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 …
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/06/17 16:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!