Info

Webページを作成時、ヘッダー、フッター、メニューなどの共通化はもう常識なってると思いますが、何年前に開発したサイトはそうでもないです。今回あるサイトのリニューアルでヘッダー、フッターの共通化がを行おうとしてたところでぶつかった問題と解決策を簡単に書いて見ます。

言語はjavaでフロントはjspを使います。特殊なことはやらず、普通にヘッダーjspとフッターjspを書いて各ページでincludeするだけです。各ページのタイトルはヘッダー部分で変数を用いて制御したいと思ってましたが、英数以外(日本語)の場合化けてしまいました。

解決1:

<% request.setCharacterEncoding(“shift-jis”); %>
<jsp:include page=”/common/header.jsp” flush=”true”>
<jsp:param name=”page_title” value=”日本語ページ”/>
</jsp:include>

一応ローカル環境では上の「解決1」で無事に開発完了しました。次にテストサーバーに上げて確認しようとしたところで、日本語のタイトルが全部化けてしまいました。テストサーバーに環境合わせて、「<% request.setCharacterEncoding(“euc-jp”); %>」に変更したらうまく行きました。あら!全部修正しないといけないな~と思った瞬間、本番サーバーはどうなの?早速テストコードで確認したところでやっぱり化けてしまいました。可笑しいなことは文字コードを変えてもだめでした。「iso-8859-1」, 「utf-8」, 「euc-jp」, 「shift-jis」, 「MS932」までやってもだめでした。頑張ってGoogleでぐぐってみたけど、答えは出ませんでした。根本的問題から考えてみればURLエンコーティングするときに化けてしまったので、そこから着手。

解決2

page.jsp
<jsp:include page=”/common/header.jsp” flush=”true”>
<jsp:param name=”page_title” value=”<%=new String(java.net.URLEncoder.encode(“日本語ページ”,”utf-8″))%>”/>
</jsp:include>

header.jsp
<title><%=new String( java.net.URLDecoder.decode( request.getParameter(“page_title” ),”utf-8″) )%></title>

Comments

No comments yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Basic HTML is allowed. Your email address will not be published.

Subscribe to this comment feed via RSS