• ベストアンサー

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コードにしている…と思うのですが、うまくいきません。 どなたか助言をお願いします。

  • HTML
  • 回答数4
  • ありがとう数4

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

  • ベストアンサー
  • 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

  • 携帯WEBサイト開発時の文字コードの取り扱いについて

    現在J2EEを使用したPC+3キャリア対応携帯WEBサイトの構築に携わっています。 フレームワークはStrutsで、VIEWにはJSPを使用しています。 OSがLinuxということで、 サーバ+DBの文字コードはEUC-JPになることが決まっていますので PCサイトは文字コードをEUC-JPで作成すればよいと思っています。 ただ、携帯の場合、技術資料にShift_JISで作成するように記述されていました。 今回のケースの場合、携帯ページで文字コードに関する不具合を回避するには どのような対処を行えばよいでしょうか? 私としてはDB等含め全て文字コードはEUC-JPで作成しておいて 携帯用のJSPと、そのJSPが参照しているActionFormに値を設定する際はEUC->Shift_JIS、 取り出す際はShift_JIS->EUCとでエンコードすれば 問題ないのではと考えていはいるのですが合っているでしょうか。 。 お手数ですがよろしくお願いします。

    • ベストアンサー
    • Java
  • LinuxでのJSPによるXML文書表示の際の文字コードについて

    Windowsで作ったXML操作のJSP(Servletと連携してます)を、Linuxのサーバー において、動作させたいと思っています。 Linuxは全く初めてなので、教えていただきたいのですが。。 XMLを再帰処理で読みこんで、ツリー構造で表示するところが、Windowsだと エラーなくできるのですが、Linuxだとjspの再帰処理の部分でソースコードのエラー (try{}catch{}の}が閉じられていないなどの)エラーになってしまいます。 Windowsのソースコードのままなので、"}"が閉じられていないというのは考えにくいので、 おそらく文字化けのエラーだと思っています。 jspのディレクティブのところは、"Shift_JIS"の部分を"EUC-JP"に変えて <%@ page pageEncoding="EUC-JP" contentType="text/html; charset=EUC-JP" ・・・・%> としたんですが、これだけでは足りないでしょうか? 再帰処理の表示のところでも、文字コードの設定が必要とか。。。 あと、画面で入力された文字はWindowsだとメソッド内で new String(string.getBytes("8859_1"), "Shift_JIS").trim(); としているんですが、"Shift_JIS"を"EUC_JP"に変えるとして、"8859_1"の部分は 変えなくて良いでしょうか?? 初歩的な質問ばかりですみません。。Linuxのことを詳しく書いてある本が会社になくて、 (Linuxの本はあっても、肝心の知りたいことが書いてなかったりするので) できればLinuxでjavaを扱うサイトやLinuxでXMLを扱うオススメのサイトを知っていたら、ぜひぜひ教えてほしいのですが☆ よろしくお願いします。

    • ベストアンサー
    • Java
  • Postgres:LinuxからWinへのDB移行

    LinuxのPostgres7.2からWindowsのPostgres8.3に DB移行を使用としています。DBは移行後もEUC_JPです。 【行った手順】 Linux ・pg_dump -F p DB > test.sql  FTP ・FTPクライアントソフトで、ファイルをWindowsマシンに転送 Win ・createdb -U postgres -h localhost -E EUC_JP DB ・psql -U postgres -h localhost DB ・windb=# \i C:/test.sql LinuxからDumpし、Winのコマンドプロンプトでtest.sqlを実行すると 下記のエラーが発生します。 invaild byte sequence for eoncoding "EUC_JP":0x8de5" 元のファイルも、移行先のDBもEUC_JPなのに、どうしてこのような エラーが発生するのでしょうか? どなたかお知恵をお貸し下さい。

  • 文字化け

    登録フォームを作成し、入力した内容でDBに追加を行うなかで、PHPmyadminで実際に見てみると文字化けしています。 レンタルサーバ(OS:linux) (1)登録フォーム(shift_jis) ↓各値を渡す (2)確認ページ(shift_jis) ↓各値をmb_convert_encoding(shift_jisに変更) (3)追加 すると文字化けします。 以前、cgi-lib.plを用いてperlで書いていたものは、 文字化けしていません。 どこがおかしいのでしょうか? ちなみに (1)登録フォーム(euc-jp) ↓各値を渡す (2)確認ページ(euc-jp) ↓各値をmb_convert_encoding(euc-jpに変更) (3)追加 としても文字化けしています。 (DBだけでなく、ページ全体も)

    • ベストアンサー
    • PHP
  • 文字のエンコードの仕方

    お世話になります。 Excelで、Linuxマシンからテキストファイルを読み込むマクロを組みました。 ところが文字コードがEUC_JPのため文字化けしてしまいます。 VBAでEUC_JPをShift-JISにまたその逆を行う方法をご存知の方、ご教示ください。

  • jspのページが表示出来ない

    ご返事有り難うございました。 jspを勉強している者です。 LINUXマシンのusr/local/jakarta-tomcat/webappsに s.jspという簡単なjspがあります。 そのページにアクセスしようと思い、 XPマシンのプラウザにhttp://192.168.200.230:8080/s.jsp としたのですが、次のようなエラーが出てします。 HTTP Status 404 - /s.jsp type Status report message /s.jsp description The requested resource (/s.jsp) is not available. tomcat、apacheは動作をしているようです。 すいませんが、よろしくお願いします。

    • ベストアンサー
    • Java
  • Fedora Core2での文字化け

    ターミナルでの文字化けを検索すると /etc/sysconfig/i18nの変更がヒットします。 LANG="ja_JP.euc_JP" SUPPORTED="ja_JP.euc_JP:ja_JP:ja" SYSFONT="latarcyrheb-sun16" これでいくと、リモートからputty.exeなどでtelnetした 際は文字化けしませんが、サーバーのターミナル上では 文字化けします。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=966286 にはターミナルの設定をEUCにしてくださいとありますが、 サーバのターミナルの文字コードはどこで変更するので しょうか? よろしくお願いします。

  • a hrefの値渡し

    今回も質問させていただきますが、よろしくお願いします。 a hrefを使って別のページに飛ぶときに、いっしょに二つの$変数名に入っている値を渡そうとしたいのですが、うまくいきません。 <html> (input.php) <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <title>入力</title> </head> <?php $rand = $_POST['rand']; $charenge= $_POST['charenge']; ?> <body> <h1>値を入力してください</h1> <form action="judgement.php" method="POST"> <input type="text" name="num"/> <input type="submit" value="比較します"> <input type="hidden" name="rand value="<?php echo $rand?>"/> <input type="hidden" name="charenge" value="<?php echo $charenge?>"/> </form> </body> </html> <html> (judgement.php) <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <title>比較結果</title> </head> <?php $rand = $_POST['rand']; $charenge = $_POST['charenge']; $num = $_POST['num']; ?> <body> <h1>比較結果</h1> <?php if($num == $rand){ print("あたりです。"); }else{ $charenge++; print("はずれです。 <br/>"); print("<a href=\"input.php\">入力ページ</a>からやり直してください"); } ?> </body> </html> 上のjudgement.phpのif文の中にある, <a href=\"input.php\">入力ページ</a>を どのように変えれば、$randと$charengeの値を input.phpに正しく渡すことができるのでしょうか? アドバイスをお願いします。

    • ベストアンサー
    • PHP
  • 日本語名ファイルのダウンロードについて

    Windowsマシン上でブラウザを立上げ、LINUXサーバーにアクセスしてファイルをダウンロードしたいのですが、ファイル名が全角文字だと、NOTFOUNDになってしまいます。 ダウンロードを行なうjavascriptは以下のとおりです。 function download(){ document.location.href = "http://190.XXX.XXX.XXX:7001/temp/download/日本語名ファイル.txt" } システムは、javaで開発しています。(Servlet,JSP,Beans) サーバーのアプリケーションは、Weblogic6.0です。 ブラウザは、IE5.5です。 サーバーがWindowsマシンの場合は、上の方法で正常にダウンロードできます。 サーバーがLINUXマシンの場合、全角文字の部分をEUCに変換しておくと、ダウンロードはできるのですが、ダウンロード後のファイル名が化けてしまうので、具合が悪いです。 日本語名ファイルをダウンロードするよい方法がありましたら、教えてください。

  • TeraTermでの文字化けについて

    TeraTermでの文字化けについて サーバ(CentOS5.4 i386)へリモートPC(Windows Vista)からTeraTerm(Ver.4.67)を使いアクセスしているのですが、日本語?の部分が文字化けてしまいます。 サーバ側の設定は、 /etc/sysconfig/i18n で、 LANG="ja_JP.eucJP" とし、デフォルトのUTF-8からEUC-JPに文字コードを変更しております。 また、TeraTerm側の設定は、設定→端末で漢字(受信、送信)をEUCにしております。 この手の質問についてはぐぐってみると結構でてきたので、いくつか参考にさせていただいたのですが、どうもうまくいきません。 今後、DBを構築する際に日本語を使う機会が増えてきそうなので、今のうちに解決してしまいたいと思っております。 お分かりになる方いらっしゃいましたら、ご教授のほどお願い致します。

専門家に質問してみよう